2012-03-20 9 views
0

iPhoneアプリケーションでIBActionを実行した後、特定のViewControllerを表示(または非表示)したいとします。私は試しましたアクションの実行後に特定のViewControllerを表示または非表示にする

[self.parentViewController.parentViewController dismissModalViewControllerAnimated:YES]; 

しかし、これはアクションが実行されても何もしていないようです。

もう少し情報:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 

{ 
    UITableViewCell *selectedCell = [tableView cellForRowAtIndexPath:indexPath]; 
    if (selectedCell.tag == 1) 
    { 

     UIActionSheet *actionSheet = [[UIActionSheet alloc] 
             initWithTitle:@"Are you sure you want to delete this project?" 
     delegate:self cancelButtonTitle:@"No" destructiveButtonTitle:@"Yes, I’m Sure" otherButtonTitles:nil]; 
     [actionSheet showInView:self.view]; 


    } 

} 

- (void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex 
{ 
    if (buttonIndex != [actionSheet cancelButtonIndex]) 
    { 

     [self.tableView beginUpdates]; // Avoid NSInternalInconsistencyException 

     // Delete the project object that was swiped 
     Project *projectToDelete = self.project; 
     NSLog(@"Deleting (%@)", projectToDelete.name); 
     [self.managedObjectContext deleteObject:projectToDelete]; 
     [self.managedObjectContext save:nil]; 

    } 
} 

私は、ユーザーがactionsheet上の[はい]ボタンを押すと、現在のビューが消えたいです。

+0

は、なぜあなたは[自己dismissModal ...]を使用していない、現在表示されているのUIViewControllerを指します。ドキュメントによれば、コールは自動的にプレゼンテーションビューコントローラに転送される。ただし、プレゼンテーション・ビュー・コントローラーは通常はself.parentViewControllerであり、そこには珍しいビュー階層がない限りself.parentViewController.parentViewControllerではありません。 –

答えて

1

ナビゲーションスタックの最初(またはルート)のビューに戻る必要がありました。

私がやらなければならないことは、この方法を使用した:自己を想定し

[controller.navigationController popToRootViewControllerAnimated:YES]; 
1
// Assume we are inside a UIViewController (or a subclass) 

DestinationController *destinationController = [[DestinationController alloc] init]; 
[self presentModalViewController:destinationController animated:YES]; 

... 

// Assume we are now in destination controller 

// Dismiss 
[self dismissModalViewControllerAnimated:YES]; 
+0

私は 'NSInvalidArgumentException'を取得しています、理由: 'NSFetchedResultsControllerのインスタンスには、これを使用するときにnil以外のfetchRequestとmanagedObjectContextのエラーが必要です' – jcrowson

+0

@LordSnoutimusつまり、NSFetchedResultsControllerを使用して、coredataを使用して管理対象オブジェクトを取得しています(明らかに、UITableViewControllerのデータソースとして機能する)が、フェッチ要求とコンテキストを提供していません。 [詳細はこちら](http://developer.apple.com/library/ios/#documentation/CoreData/Reference/NSFetchedResultsController_Class/Reference/Reference.html) – Alladinian

0

もう1つの方法は、pushViewControllerとpopViewControllerです。

- (無効)pushViewController:ViewControllerを表示するには

(のUIViewController *)のViewControllerアニメーション:(BOOL)アニメーションを。 //水平方向のスライドトランジションを使用します。ビューコントローラが既にスタックにある場合は効果がありません。

そして却下する:

- (のUIViewController *)popViewControllerAnimated:(BOOL)アニメーション。 //ポップされたコントローラを返します。

+0

これは正しいが、これらのメソッドは、 'UINavigationController' – Alladinian

関連する問題