2012-02-12 36 views
169

trong ứng dụng của tôi, tôi đã là một nút mà thực hiện một segue lập trình:Thực hiện Segue lập trình và truyền tham số cho quan điểm điểm đến

- (void)myButtonMethod 
{ 
    //execute segue programmatically 
    [self performSegueWithIdentifier: @"MySegue" sender: self]; 
} 

Tôi muốn biết nếu có một cách để tham khảo quan điểm đích và để truyền một số thông số.

Tôi biết rằng theo phương pháp prepareForSegue, tôi có thể tham khảo nó bằng: myDestinationViewController *vc = [segue destinationViewController];, nhưng tôi không biết cách thực hiện phân đoạn này theo chương trình.

Bạn có ý tưởng nào không?

Cảm ơn, yassa


UPDATE:

Tôi xin lỗi vì câu hỏi này !!! Tôi chỉ đơn giản phát hiện ra rằng, ngay cả khi segue được gọi theo chương trình, phương thức prepareForSegue được gọi là anyway và vì vậy có thể truyền tham số theo cùng cách thông thường.

+44

Thêm cập nhật làm câu trả lời và chấp nhận để mọi người biết điều này đã được trả lời :) – danielbeard

+0

Thêm câu trả lời, nhận xét để thông báo. – DanSkeel

+11

Bạn nên đánh dấu câu trả lời [bên dưới] (http://stackoverflow.com/a/10783047/377384) là chính xác, vì vậy mọi người biết rằng nó đã được trả lời. –

Trả lời

104

Câu trả lời đơn giản là nó không tạo ra sự khác biệt về cách kích hoạt phân đoạn.

Phương thức prepareForSegue:sender: được gọi trong mọi trường hợp và đây là nơi bạn chuyển các thông số của mình qua.

90

Câu hỏi cũ nhưng đây là mã về cách thực hiện những gì bạn đang yêu cầu. Trong trường hợp này, tôi đang truyền dữ liệu từ một ô được chọn trong một khung nhìn bảng tới một bộ điều khiển khung nhìn khác.

trong file .h của xem trget:

@property(weak, nonatomic) NSObject* dataModel; 

trong file .m:

@synthesize dataModel; 

dataModel có thể string, int, hoặc như trong trường hợp này đó là một mô hình mà chứa nhiều mặt hàng

- (void)someMethod { 
    [self performSegueWithIdentifier:@"loginMainSegue" sender:self]; 
} 

HOẶC. ..

- (void)someMethod { 
    UIViewController *myController = [self.storyboard instantiateViewControllerWithIdentifier:@"HomeController"]; 
    [self.navigationController pushViewController: myController animated:YES]; 
} 

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    if([segue.identifier isEqualToString:@"storyDetailsSegway"]) { 
     UITableViewCell *cell = (UITableViewCell *) sender; 
     NSIndexPath *indexPath = [self.tableView indexPathForCell:cell]; 
     NSDictionary *storiesDict =[topStories objectAtIndex:[indexPath row]]; 
     StoryModel *storyModel = [[StoryModel alloc] init]; 
     storyModel = storiesDict; 
     StoryDetails *controller = (StoryDetails *)segue.destinationViewController; 
     controller.dataModel= storyModel; 
    } 
} 
0

Tôi hiểu vấn đề thực hiện phân đoạn tại một nơi và duy trì trạng thái gửi tham số chuẩn bị cho segue.

Tôi đã tìm ra cách để thực hiện việc này. Tôi đã thêm một thuộc tính được gọi là userInfoDict vào ViewControllers bằng cách sử dụng một thể loại. và tôi đã ghi đè thực hiện segue với định danh quá, theo cách mà nếu người gửi là tự (có nghĩa là bộ điều khiển chính nó). Nó sẽ chuyển userInfoDict này tới ViewController tiếp theo.

Ở đây thay vì chuyển toàn bộ UserInfoDict, bạn cũng có thể chuyển các tham số cụ thể, làm người gửi và ghi đè phù hợp.

1 điều bạn cần lưu ý. đừng quên gọi phương thức siêu trong phương thức performSegue của ur.

0

Trong trường hợp nếu bạn sử dụng phiên bản nhanh mới.

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
     if segue.identifier == "ChannelMoreSegue" { 

     } 
} 
Các vấn đề liên quan