2011-09-29 4 views
6

Trong khi thực hiện một khoảng cách giữa hai bộ điều khiển xem làm thế nào để thay đổi một thuộc tính của bộ điều khiển xem đích bằng cách sử dụng đối tượng segue? Tài liệu nói rằng điều này có thể được thực hiện bên trong phương thức preparForSegue: sender:. Tôi đã thử nó nhưng không thành côngiOS 5 segue implementation

Trả lời

13

Dunno nếu bạn vẫn cần câu trả lời cho điều này, nhưng đó là một bài đăng cô đơn, và nếu tôi đúng, điều này không thuộc NDA nữa. Nếu tôi nhầm, hãy kiểm duyệt câu trả lời của tôi thành lãng quên, vì vậy ở đây chúng tôi đi: Tôi vừa hoàn thành một cái gì đó sử dụng những gì bạn cần. Đây là mã hoạt động cho tôi:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([[segue identifier] isEqualToString:@"relevantSegueIdentifier"]) 
    { 
     // [segue destinationViewController] is read-only, so in order to 
     // write to that view controller you'll have to locally instantiate 
     // it here: 
     ViewController *upcomingViewController = [segue destinationViewController]; 

     // You now have a solid reference to the upcoming/destination view 
     // controller. Example use: Allocate and initialize some property of 
     // the destination view controller before you reach it and inject a 
     // reference to the current view controller into the upcoming one: 
     upcomingViewController.someProperty = [[SomePropertyClass alloc] initWithString:@"Whatever!"]; 
     upcomingViewController.initialViewController = [segue sourceViewController]; 
     // Or, equivalent, but more straightforward: 
     //upcomingViewController.initialViewController = self; 
    } 
} 

Giả định rằng cả một sốProperty và initialViewController đều là bộ tổng hợp của trình điều khiển chế độ xem đích. Hi vọng điêu nay co ich!

+0

nó thuộc NDA nhưng trong 3 ngày nó sẽ không được phát hành chính thức là vào ngày 14 tháng 10, nhưng tôi thích câu trả lời của bạn +1 –

+0

Tôi đã thử những gì bạn nói nhưng thuộc tính trên 'destinationViewController' của tôi không cập nhật . Lời khuyên nào? – Francesco

+0

Tôi lấy nó, bạn sử dụng một bộ tổng hợp (không phải là một thanh công cụ riêng) của bộ điều khiển xem đích và bộ điều khiển xem đã được khởi tạo trong quá trình thiết lập ứng dụng (tức là bảng phân cảnh với bộ điều khiển xem thực tế được đặt trong đó, một khoảng cách giữa chúng tất cả phóng). Trong trường hợp đó, nó sẽ hoạt động. Sau đó nó có thể là một cái gì đó giống như hệ thống không biết về số phận cụ thể của bạn. xem lớp điều khiển. Lớp ViewController trong ví dụ của tôi là một lớp con của UIViewController, và trước khi @implementation tôi làm một cái gì đó như '#import' ViewController.h "'. Nó có thể là một trong những thứ này không? – DarqueSandu

0

gì tôi sử dụng theo quan điểm của nguồn điều khiển là:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    UIViewController *upcomingViewController = [segue destinationViewController]; 
    upcomingViewController.view.tag = [[segue identifier] hash]; 
} 

Và sau đó trong bộ điều khiển xem nơi tôi sử dụng (sử dụng ví dụ trong viewDidAppear)

if(self.view.tag == [@"MySeqgueIdentifier" hash]) 
{ 
    // Do something here... 
} 

Đây là mát mẻ, vì bạn không phải tạo bất kỳ thuộc tính nào vv và mọi thứ hoạt động ngay từ trình tạo giao diện.