2014-04-04 67 views
1

直到現在我已經使用prepareForSegue方法來通知視圖控制器,他將從一個不同的視圖控制器中檢查一個segue,但是如果我是發送segue的vc,我的prepareForSegue(在他同一類的segue發件人)將檢查是否有一個代碼來執行preform之前,他開始segue?當segue即將執行到另一個視圖控制器時,prepareForSegue是否通知視圖控制器?

我在問,因爲我在這裏得到了一個解決方案來執行一個簡單的segue,只是爲了從穩定的視圖行代表註釋到編輯註釋的創建頁面...非常簡單,但從某種原因來看它不是提出我注意到在創建頁面,只需要我到一個新的清潔創建頁面..

所以我雖然也許是因爲prepareForSegue method..here你可以看到這個問題,給你更多的細節How to to create a segue to push back to editing mode from a table view?

真的很感激得到你的幫助。

這是第2種方法我加入到我的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,而不是用音符內容填充它的:/

這是我得到的錯誤:

enter image description here

謝謝!

回答

2

當前 VC上調用prepareForSegue:方法不是目的地。 UIViewController Class Reference。在執行segue之前,您可以使用該方法獲取對目標VC的引用並在其上設置變量/調用方法。

調用這樣的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; 
    } 
} 
+0

@Ashley您好,我添加了一些代碼到最後的問題,由於某種原因,它仍然不適合我......請幫助解決這個問題,因爲它讓我瘋狂。謝謝! – Joe

+1

修改我的答案。你也使用了DEselect而不是didSelect。我一直犯同樣的錯誤(我怪xCode的自動完成) – Ashley

+0

heh yeah這個錯誤很煩人:/我確實實現了你的建議,我完全理解它背後的邏輯,但現在另一個SIGABRT錯誤,我添加了一個截圖該錯誤..感謝:) @Ashley – Joe

0

要檢查是否有您可以使用下面的解決方案的SEGUE前大跳代碼:

if ([segue.destinationViewController isKindOfClass:[UIViewController class]]) { 
     UIViewController *nextVC = segue.destinationViewController; 
     if(nextVC respondsToSelector:@selector(yourMethod)){ 
       [nextVC yourMethod]; 
     } 
} 
0

您可以檢查您是否確定通過實施該方法

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender 
執行特定SEGUE
0

如果您的筆記在viewDidLoad中顯示代碼,請嘗試將其移至viewDidAppear(在筆記編輯VC中)。從TableView行提交的行在執行VDL後會觸發segue時,會出現問題。

相關問題