2013-04-23 33 views
8

Tôi nhận được hai khoảng cách dẫn đến cùng một số viewController. Có 2 nút được kết nối với cùng một viewController sử dụng 2 phân đoạn. Trong đó viewController Tôi cần kiểm tra xem nút nào đã được nhấp. Vì vậy, thực sự tôi cần phải kiểm tra segue đã được sử dụng/preformed. Làm thế nào tôi có thể kiểm tra điều này trong lớp viewControllers? Tôi biết có phương pháp prepareForSegue, nhưng tôi không thể sử dụng nó cho mục đích của mình vì tôi cần đặt prepareForSegue trong lớp nơi có 2 nút và tôi không muốn ở đó nhưng tôi muốn nó ở lớp viewControllers vì tôi cần truy cập và thiết lập một số biến trong lớp đó.Cách kiểm tra xem segue nào đã được sử dụng

Trả lời

8

Bạn cần phải thiết lập một biến bộ điều khiển xem thứ hai trong phương thức prepforsegue của phương thức đầu tiên. Đây là cách thực hiện:

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if([segue.identifier isEqualToString:segueIdentifier1]) 
    { 
     SecondViewController *secondVC = (SecondViewController *)segue.destinationViewController; 
     if(sender.tag == ...) // You can of course use something other than tag to identify the button 
     { 
      secondVC.identifyingProperty = ... 
     } 
     else if(sender.tag == ...) 
     { 
      secondVC.identifyingProperty = ... 
     } 
    } 
} 

Sau đó, bạn có thể kiểm tra thuộc tính đó trong vc thứ hai để hiểu cách bạn đến đó. Nếu bạn đã tạo 2 phân đoạn trong bảng phân cảnh cho 2 nút, thì chỉ định danh phân biệt là đủ để đặt giá trị thuộc tính tương ứng. Sau đó, mã sẽ chuyển thành điều này:

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if([segue.identifier isEqualToString:segueIdentifier1]) 
    { 
     SecondViewController *secondVC = (SecondViewController *)segue.destinationViewController; 
     secondVC.identifyingProperty = ... 
    } 
    else if([segue.identifier isEqualToString:segueIdentifier2]) 
    { 
     SecondViewController *secondVC = (SecondViewController *)segue.destinationViewController; 
     secondVC.identifyingProperty = ... 
    } 
} 
+0

Tôi đã làm điều đó, nhưng khi tôi đặt điều này: PageScrollViewController * controller = (PageScrollViewController *) segue.destinationViewController; controller.startStory = YES; ứng dụng bị treo – nonuma

+0

*** Chấm dứt ứng dụng do ngoại lệ chưa nắm bắt 'NSInvalidArgumentException', lý do: '- [UIViewController setStartStory:]: bộ chọn không được nhận dạng được gửi tới trường hợp 0x9976420' *** Lệnh gọi đầu tiên: – nonuma

+0

Phần lạ là lỗi nói somethiing về "setStartStory" nhưng tôi không bao giờ sử dụng này? Tôi sử dụng startStory – nonuma

2

Trước tiên, bạn cần đặt mã định danh segues của mình trực tiếp trong storyborads hoặc thông qua mã của bạn bằng cách sử dụng phương thức performSegueWithIdentifier. độc lập theo cách bạn chọn lựa, bộ điều khiển tầm nhìn của bạn sẽ cháy các phương pháp sau đây, vì vậy bạn cần phải ghi đè nó để biết được segue được gửi tin nhắn, bạn làm như thế này:

-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {  
     if ([segue.identifier isEqualToString:@"ButtonSegueIdentifierOne"]) { 
      // button 1 
     } 
     if ([segue.identifier isEqualToString:@"ButtonSegueIdentifierTwo"]) { 
      // button 2 
     } 
} 
Các vấn đề liên quan