0

NSMutableArraydetailsDataSourceとintdetailIndexは、次の場所から次のViewControllerに渡されます MainDetailViewController.m

#import "UsersDetailViewController.h"
...
- (void)swipeDetectedUp:(UISwipeGestureRecognizer *)sender
{
    UsersDetailViewController *usersController = [[self storyboard] instantiateViewControllerWithIdentifier:@"UsersController"];
    [self.navigationController pushViewController:usersController animated:NO];

    usersController.usersDataSource = [[NSMutableArray alloc] initWithArray:detailsDataSource];
    usersController.userDetailIndex = detailIndex;
}

のインデックスをスワイプしますUserDetailViewController.m

- (void)swipeDetectedRight:(UISwipeGestureRecognizer *)sender
{
if (userDetailIndex != 0)
    userDetailIndex--;  
}

swipeDetectedDownでポップバックするMainDataViewController場合、インデックスのどのオブジェクトを表示するかを知る必要があります。

- (void)swipeDetectedDown:(UISwipeGestureRecognizer *)sender
{
//jump to correct object at index, same as current object at index in this view
[self.navigationController popViewControllerAnimated:NO];
}

コードの提案?

4

2 に答える 2

0

NSNotificationCenterを使用して、オブジェクトをMainDataViewControllerに送り返します。

例:

UsersDetailViewControllerで、NSDictionaryにkey => valueペアを入力し、それを目的の場所に送信します。

NSArray *key = [NSArray arrayWithObject:@"myIndex"];
NSArray *object = [NSArray arrayWithObject:detailIndex];  
NSDictionary *dictionary = [NSDictionary dictionaryWithObjects:object forKeys:key];
[[NSNotificationCenter defaultCenter] postNotificationName:@"MainDataViewController" object:self userInfo:dictionary];

注:MainDataViewControllerまたはそれを呼び出したいものと呼ばれる識別子をMainDataViewControllerに設定する必要があります。VC名を使用すると、簡単になります。

次に、MainDataViewControllerで、viewDidLoad()メソッドでこれを実行します。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receiveNotification:) name:@"MainDataViewController" object:nil];

次に、次の方法を使用して通知を受け取ります。

- (void)receiveNotification:(NSNotification *) notification
{    
    if([[notification name] isEqualToString:@"MainDataViewController"])
    {       
        NSDictionary *dictionary = [NSDictionary dictionaryWithDictionary:[notification userInfo]];

        if([dictionary valueForKey:@"myIndex"]) 
        {
            // do whatever you need to do with the passed object here. In your case grab the detailIndex and use it for something...
        }             
    }
}
于 2012-08-28T18:56:11.047 に答える
0

簡単な部分は、UsersDetailViewControllerポインターをMainDetailViewControllerのプロパティに配置して、後でself.usersController.usersDataSourceとself.usersController.userDetailIndexにアクセスできるようにすることです。次に、唯一のトリックは、UsersDetailViewControllerがいつポップされたかを知ることです。

私が書いていたコードでは、MainDetailViewControllerをUsersDetailViewControllerのデリゲートにし、UsersDetailViewControllerをプログラムで閉じたいときにMainDetailViewControllerのデリゲートメソッドを呼び出し、その中でpopViewControllerAnimated:とMainDetailViewControllerの状態を更新するなどのことをよく試みました。 。つまり、常に親のコードで子をポップオフさせます。これは機能しますが、ナビゲーションコントローラーの戻るボタンを使用して子ビューコントローラーを自動的にポップさせる場合は機能しないため、全体として、この手法に反対します。

親のコードが子がポップされたときに呼び出されるようにするためのより良い解決策があると思います。おそらくviewWillAppearメソッドを実装し、self.usersControllerがそこに設定されている場合は、UsersDetailViewControllerから戻ってきていることがわかります。その時点で、他のコントローラーのプロパティにアクセスし、最後にself.usersControllerをクリアします。

于 2012-08-28T22:14:50.127 に答える