我想知道是否有人可以解释在下面的示例中使用展开segue和使用委托之间的区别:
我有一个由FriendsTableViewController
朋友填充的array
和另一个AddFriendTableViewController
,其中包含friend
添加FriendsTableViewController
的功能。
这是我通过AddFriendViewController
发送unwind segue
数据的方式:
#pragma mark - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
// Check whether the Done button was tapped.
// If it wasn’t, instead of saving the friend, the method returns without doing anything else.
if (sender != self.doneButton) return;
// See whether there’s text in the text field.
if (self.nameTextField.text.length > 0) {
// If there’s text, create a new friend and give it's properties the input from the text fields.
self.friend = [[Friend alloc] initWithName:self.nameTextField.text
dateOfBirth:self.birthdayDatePicker.date
numberOfGifts:0];
}
}
这是我使用AddFriendTableViewController
将array
中的数据添加到FriendsTableViewController
中unwind segue action
的数据:
#pragma mark - Actions
- (IBAction)unwindSegue:(UIStoryboardSegue *)segue
{
// Retrieve the source view controller, the controller that is unwinding from.
AddFriendTableViewController *soruce = [segue sourceViewController];
// Retrieve the soruce view controller’s friend object.
Friend *friend = soruce.friend;
// See whether the item exists.
// If it’s nil, either the Cancel button closed the screen or the text field had no text, so you don’t want to save the item.
if (friend != nil) {
// If it does exist, add the item to the friends array.
[self.friends addObject:friend];
// Reload the data in the table.
[self.tableView reloadData];
}
}
现在这可以按照我的意愿运行,所以我希望我没有违反任何stackoverflow规则或冒犯任何人,但我只是想知道我的示例代码的使用方式和相同的方案之间的区别是什么但是使用AddFriendViewController
的自定义委托方法。如果有人可以解释它会很棒!
答案 0 :(得分:7)
使用展开segue与拥有委托非常相似,具有以下优点:
缺点是
prepareForSegue
中有很多分支标识符名称你的代码看起来不错。我坚持下去。