到目前为止,我已经使用prepareForSegue
方法通知视图控制器他将要查看来自不同视图控制器的segue,但如果我是发送segue的vc,那么我的prepareForSegue(在同一类的segue发送者)会在他开火之前检查是否有预先形成的代码?
我问是因为我在这里得到了一个解决方案来预先形成一个简单的segue只是为了从表示注释的稳定视图行到编辑注释的创建页面...非常简单,但是由于某种原因它没有呈现我在创建页面中的注释,只会将我带到一个新的干净创建页面..
所以我想也许是因为prepareForSegue方法......你可以看到问题给你更多细节How to to create a segue to push back to editing mode from a table view?
非常感谢您的帮助。
这是我添加到NotesList表视图控制器的两种方法:
#pragma mark - delegate
- (void) tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
{
[self performSegueWithIdentifier:@"noteSegue" sender:nil];
}
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"noteSegue"]) {
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
NMNote *note = [self.notes objectAtIndex:indexPath.row];
NMCreateNotesViewController *destination = [segue destinationViewController];
destination.textField.text = note.content;
}
}
我确保故事板中的segue标识符名为noteSegue。那么为什么它的注意工作...我得到一个新的TextView而不是用注释内容填充它:/
这是我得到的错误:
谢谢!
答案 0 :(得分:2)
在当前 VC而不是目标上调用prepareForSegue:
方法。 UIViewController Class Reference。您可以使用该方法获取对目标VC的引用,并在执行segue之前在其上设置变量/调用方法。
像这样调用segue:
[self performSegueWithIdentifier:@"NAMEOFSEGUE" sender:nil];
然后您可以像这样准备目标VC:
#import "NMCreateNotesViewController.h"
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"NAMEOFSEGUE"]) {
NMCreateNotesViewController *destination = [segue destinationViewController];
[destination createNote]; /* or something similar */
}
}
编辑:
- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NMNote *note = [self.notes objectAtIndex:indexPath.row];
[self performSegueWithIdentifier:@"noteSegue" sender:note];
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"NAMEOFSEGUE"]) {
NMCreateNotesViewController *destination = [segue destinationViewController];
NMnote *note = (NMNote*) sender;
destination.textField.text = note.content;
}
}
答案 1 :(得分:0)
要检查在segue之前是否有要执行的代码,您可以使用以下解决方案:
if ([segue.destinationViewController isKindOfClass:[UIViewController class]]) {
UIViewController *nextVC = segue.destinationViewController;
if(nextVC respondsToSelector:@selector(yourMethod)){
[nextVC yourMethod];
}
}
答案 2 :(得分:0)
您可以通过实施此方法检查您是否确定要执行特定的segue
- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender
答案 3 :(得分:0)
如果您的笔记在viewDidLoad
中显示代码,请尝试将其移至viewDidAppear
(在编辑VC的笔记中)。从TableView
行提交VDL执行后将触发segue时会出现问题。