2013-07-22 20 views
8

Tôi muốn đặt tiêu đề trên bộ điều khiển chế độ xem đích sao cho nó hiển thị trong thanh điều hướng của trình điều khiển trong phương thức prepareForSegue: như vậy:Làm cách nào để đặt tiêu đề trên bộ điều khiển chế độ xem đích trong khi chuẩn bịForSegue:

[segue.destinationViewController setTitle:@"doesn't work"]; [segue.destinationViewController.navigationItem setTitle:@"this either"];

không hoạt động có thể vì xem điều khiển quan điểm của của đích không nạp được nêu ra. Tôi có thể làm điều này mà không cần tạo bộ điều khiển chế độ xem đích tùy chỉnh không?

Trả lời

11

Hãy thử truy cập vào số ViewController được nhúng trong số UINavigationController như thế này. Trước tiên, bạn cung cấp mã nhận diện trong trình tạo giao diện, sau đó bạn truy cập segue theo phương pháp prepareForSegue và đặt tiêu đề bằng cách truy cập thuộc tính topViewController của trình điều khiển điều hướng bạn muốn.

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([[segue identifier] isEqualToString:@"yourSegueIdentifier"]) { 
     UINavigationController *navController = 
      (UINavigationController*)[segue destinationViewController]; 
     YourViewController *destViewController = 
      (YourViewController*)[navController topViewController]; 

     destViewController.navgationItem.title = @"Your title"; 

    } 
} 
+2

Cảm ơn.Đây không phải là vấn đề chính xác của tôi cũng không giải pháp này làm việc cho tôi nhưng nó nhắc tôi rằng bộ điều khiển xem nguồn nằm trong khung nhìn vùng chứa, sau đó nằm trong bộ điều khiển chế độ xem điều hướng. Vì vậy, tôi chỉ cần tham khảo bộ điều khiển điều hướng chính xác trong chồng của tôi. –

+0

Steve, bạn có thể giải thích về cách bạn tham chiếu bộ điều khiển điều hướng chính xác không? –

1

Nếu bạn muốn có tiêu đề tĩnh bây giờ có thể được thực hiện trong Bảng phân cảnh bằng cách đặt tiêu đề trong thanh điều hướng trên bộ điều khiển chế độ xem có liên quan.

Nếu bạn muốn tiêu đề thanh điều hướng thay đổi theo chế độ xem đang được phân tách, ví dụ: chi tiết của một hàng trong bảng, theo như tôi biết cần được đặt theo chương trình.

Tôi đã mất thời gian (newbie, sigh!) Để tìm hiểu cách sửa đổi câu trả lời đúng của Julian Vogels để gọi khóa mà tôi muốn sử dụng. Đây là những gì làm việc:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    if ([[segue identifier] isEqualToString:@"DetailSegue"]) { 
     // Fetch Item 
     NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; 
     NSDictionary *item = [self.groceries objectAtIndex:[indexPath row]]; 
     // Configure Detail View Controller 
     TPDetailViewController *vc = [segue destinationViewController]; 
     vc.navigationItem.title = [item objectForKey:@"name"]; 
     [vc setItem:item]; 
} 
1

này là dành cho một segue vào một UITableView

  1. Đặt một tài sản NSString nào trong file đích UITableViewController.

    @property (strong, nonatomic) NSString *navBarTitle;

  2. Override setter trong file .m chỉ để đảm bảo.

    - (void) setNavBarTitle:(NSString *)navBarTitle { _navBarTitle = navBarTitle; }

  3. Trong nguồn gốc phương pháp segue tableView của, vượt qua bất cứ điều gì bạn cần chuỗi trong tiêu đề.

    - (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if ([[segue identifier] isEqualToString: @"userDetails"]) { UsersActivitiesTableViewController *destinationController = segue.destinationViewController; //Get the index path of the cell the user just clicked NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; //Grab the object from the array of users if the next view requires a specific title for a user name etc. UserMO *thisUser = [self.users objectAtIndex:indexPath.row]; //Pass the string you want as the title to the public NSString property destinationController.navBarTitle = thisUser.name; } }

  4. Và bây giờ cho bit quan trọng .... Trong bộ điều khiển đích, có bộ điều khiển trên cùng của xem và thiết lập thuộc tính tiêu đề, sau khi xem được nạp, và trước khi nó đã được hiển thị:

    - (void) viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [self.navigationController topViewController].title = self.navBarTitle; }

0

Nếu segue là một segue push - mà nó nên nếu bạn đang sử dụng một UINavigationController - sau đó các điều khiển xem đích là tự động được thêm vào hệ thống phân cấp cửa sổ và bạn thậm chí không cần phải xác định UINavigationController:

if ([segue.identifier isEqualToString:@"yourSegueNameHere"]) {  
    [segue.destinationViewController setTitle:@"yourTitleHere"]; 
} 
Các vấn đề liên quan