Từ 1 tới 2 trên tổng số 2 kết quả

Đề tài: Cách sử dụng MultipleDetailViews Và SplitviewController

  1. #1
    Ngày gia nhập
    10 2008
    Nơi ở
    sài gòn
    Bài viết
    422

    Mặc định Cách sử dụng MultipleDetailViews Và SplitviewController

    Cách sử dụng MultipleDetailViews Và SplitviewController trong Object-C như thế nào?
    Đã được chỉnh sửa lần cuối bởi haian : 03-11-2011 lúc 10:43 AM.
    cố gắng

  2. #2
    Ngày gia nhập
    02 2008
    Bài viết
    1,009

    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:

    Code:
    /*
         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





    Code:
    /*
         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 toolbar/navigation 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

    Code:
    @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

    Code:
    @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
    Attached Files Attached Files
    Đã được chỉnh sửa lần cuối bởi AlexF : 21-09-2011 lúc 09:56 AM.

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn