-1

didSelectRowAtIndexPath:の変更をリッスン/検出しviewController1、この選択に基づいて の何かを変更したいと思いviewController2ます。

どうすればこれを行うことができるのでしょうか?

4

1 に答える 1

5

KVOを使用してください。

最初に ViewController1.h に @property を作成します。

@property (strong, nonatomic) NSIndexPath *selectedIndexPath;

ViewController1.m で:

@synthesize selectedIndexPath;

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if(indexPath!=self.selectedIndexPath) self.selectedIndexPath = indexPath; //this will fire the property changed notification

ViewController2.m で、ViewController1 (つまり vc1) への参照が既にあると仮定して、viewDidLoad で Observer を設定します。

-(void)viewDidLoad
{
     [super viewDidLoad];
     [vc1 addObserver:self forKeyPath:@"selectedIndexPath" options:NSKeyValueObservingOptionNew context:NULL];
     //other stuff

最後に、ViewController2 のどこかに次を追加します。

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    //inspect 'change' dictionary, fill your boots

    ...
}

イータ:

ViewController2 の dealloc でオブザーバーも削除する必要があります。

-(void)dealloc
{
    [vc1 removeObserver:self forKeyPath:@"selectedIndexPath"];
    ...
}
于 2013-02-01T13:59:35.113 に答える