Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 2 của 2
  1. #1
    Ngày tham gia
    Sep 2015
    Đang ở
    Hà Nội
    Bài viết
    0

  2. #2

    Note that the SplitViewController will only handle two view controllers,you cannot and should not put more (or less) than two controllers into its NSArray.
    http://useyourloaf.com/blog/2010/4/2...-part-iii.html


    nhưng có thể dùng cách này:

    Mã:
    /*
         File: RootViewController.h
     Abstract: A table view controller that manages two rows. Selecting a row creates a new detail view controller that is added to the split view controller.
    
     */
    
    #import <UIKit/UIKit.h>
    
    
    /*
     SubstitutableDetailViewController defines the protocol that detail view controllers must adopt. The protocol specifies methods to hide and show the bar button item controlling the popover.
    
     */
    @protocol SubstitutableDetailViewController
    - (void)showRootPopoverButtonItem:(UIBarButtonItem *)barButtonItem;
    - (void)invalidateRootPopoverButtonItem:(UIBarButtonItem *)barButtonItem;
    @end
    
    
    @interface RootViewController : UITableViewController <UISplitViewControllerDelegate> {
    	
    	UISplitViewController *splitViewController;
        
        UIPopoverController *popoverController;    
        UIBarButtonItem *rootPopoverButtonItem;
    }
    
    @property (nonatomic, assign) IBOutlet UISplitViewController *splitViewController;
    
    @property (nonatomic, retain) UIPopoverController *popoverController;
    @property (nonatomic, retain) UIBarButtonItem *rootPopoverButtonItem;
    
    @end



    Mã:
    /*
         File: RootViewController.m
     Abstract: A table view controller that manages two rows. Selecting a row creates a new detail view controller that is added to the split view controller.
    
     */
    
    #import "RootViewController.h"
    #import "FirstDetailViewController.h"
    #import "SecondDetailViewController.h"
    
    
    @implementation RootViewController
    
    @synthesize popoverController, splitViewController, rootPopoverButtonItem;
    
    
    #pragma mark -
    #pragma mark View lifecycle
    
    - (void)viewDidLoad {
        
        [super viewDidLoad];
        // Set the content size for the popover: there are just two rows in the table view, so set to rowHeight*2.
        self.contentSizeForViewInPopover = CGSizeMake(310.0, self.tableView.rowHeight*2.0);
    }
    
    -(void) viewDidUnload {
    	[super viewDidUnload];
    	
    	self.splitViewController = nil;
    	self.rootPopoverButtonItem = nil;
    }
    
    #pragma mark -
    #pragma mark Rotation support
    
    - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
        return YES;
    }
    
    
    - (void)splitViewController:(UISplitViewController*)svc willHideViewController:(UIViewController *)aViewController withBarButtonItem:(UIBarButtonItem*)barButtonItem forPopoverController:(UIPopoverController*)pc {
        
        // Keep references to the popover controller and the popover button, and tell the detail view controller to show the button.
        barButtonItem.title = @"Root View Controller";
        self.popoverController = pc;
        self.rootPopoverButtonItem = barButtonItem;
        UIViewController <SubstitutableDetailViewController> *detailViewController = [splitViewController.viewControllers objectAtIndex:1];
        [detailViewController showRootPopoverButtonItem:rootPopoverButtonItem];
    }
    
    
    - (void)splitViewController:(UISplitViewController*)svc willShowViewController:(UIViewController *)aViewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem {
     
        // Nil out references to the popover controller and the popover button, and tell the detail view controller to hide the button.
        UIViewController <SubstitutableDetailViewController> *detailViewController = [splitViewController.viewControllers objectAtIndex:1];
        [detailViewController invalidateRootPopoverButtonItem:rootPopoverButtonItem];
        self.popoverController = nil;
        self.rootPopoverButtonItem = nil;
    }
    
    
    #pragma mark -
    #pragma mark Table view data source
    
    - (NSInteger)tableView:(UITableView *)aTableView numberOfRowsInSection:(NSInteger)section {
        
        // Two sections, one for each detail view controller.
        return 2;
    }
    
    
    - (UITableViewCell *)tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
        
        static NSString *CellIdentifier = @"RootViewControllerCellIdentifier";
        
        // Dequeue or create a cell of the appropriate type.
        UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (cell == nil) {
            cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
        }
        
        // Set appropriate labels for the cells.
        if (indexPath.row == 0) {
            cell.textLabel.text = @"First Detail View Controller";
        }
        else {
            cell.textLabel.text = @"Second Detail View Controller";
        }
    
        return cell;
    }
    
    
    #pragma mark -
    #pragma mark Table view selection
    
    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
        
        /*
         Create and configure a new detail view controller appropriate for the selection.
         */
        NSUInteger row = indexPath.row;
        
        UIViewController <SubstitutableDetailViewController> *detailViewController = nil;
    
        if (row == 0) {
            FirstDetailViewController *newDetailViewController = [[FirstDetailViewController alloc] initWithNibName:@"FirstDetailView" bundle:nil];
            detailViewController = newDetailViewController;
        }
    
        if (row == 1) {
            SecondDetailViewController *newDetailViewController = [[SecondDetailViewController alloc] initWithNibName:@"SecondDetailView" bundle:nil];
            detailViewController = newDetailViewController;
        }
    
        // Update the split view controller's view controllers array.
        NSArray *viewControllers = [[NSArray alloc] initWithObjects:self.navigationController, detailViewController, nil];
        splitViewController.viewControllers = viewControllers;
        [viewControllers release];
        
        // Dismiss the popover if it's present.
        if (popoverController != nil) {
            [popoverController dismissPopoverAnimated:YES];
        }
    
        // Configure the new view controller's popover button (after the view has been displayed and its toolbaravigation bar has been created).
        if (rootPopoverButtonItem != nil) {
            [detailViewController showRootPopoverButtonItem:self.rootPopoverButtonItem];
        }
    
        [detailViewController release];
    }
    
    
    #pragma mark -
    #pragma mark Memory management
    
    - (void)dealloc {
        [popoverController release];
        [rootPopoverButtonItem release];
        [super dealloc];
    }
    
    @end
    và đây là cách làm: http://www.youtube.com/watch?v=cnvtb...layer_embedded


    đầu tiên, quan trọng nhất là các detailview phải cùng kế thừa từ uiviewcontroller và đặt delegate là SubstitutableDetailViewController

    Mã:
    @interface FirstDetailViewController : UIViewController <SubstitutableDetailViewController>
    như các detail thông thừong thì xử lý delegate sẽ nằm ở detailview, nhưng lần này nó sẽ phải được đặt ở Rootviewcontroller

    Mã:
    @interface RootViewController : UITableViewController <UISplitViewControllerDelegate> {
    chú ý là phần được đánh dấu

    #pragma mark -
    #pragma mark Table view data source
    là data của tableview, tức các cell của tableview

    còn

    #pragma mark -
    #pragma mark Table view selection
    là các sự kiện chọn vào cell

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •