3

アプリが通知を受け取ったときに起動する AppDelegate に handleLocalNotification というメソッドがあります。UITableview を含む UITabBarController でタブ 0 に切り替える必要があります。次に、テーブルビューの正しい行をプッシュして、通知によって送信されたレコードを表示する必要があります。すべてのコントローラーはストーリーボードで作成されるため、AppDelegate でコントローラーへの参照はありません。

AppDelegate.h に追加しました:

@class MyListViewController;
@interface iS2MAppDelegate : UIResponder <UIApplicationDelegate> {

    MyListViewController *_listControl;

}

テストのために、これを didFinishLaunchingWithOptions メソッドに入れています。

UITabBarController *tabb = (UITabBarController *)self.window.rootViewController;
    tabb.selectedIndex = 0;
    _listControl = [tabb.viewControllers objectAtIndex:0];
    [_listControl.tableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:4 inSection:0] animated:YES scrollPosition:UITableViewScrollPositionTop];

tabBarController ビットは、さまざまなタブにロードできるように機能します。最後の 2 行でクラッシュします。これについて正しい方法で行ったことがありますか?または、別の方法を使用する必要がありますか? クラッシュの理由は次のとおりです。

UINavigationController tableView]: 認識されないセレクターがインスタンスに送信されました

4

1 に答える 1

6

NSNotificationCenterこのように試してみることをお勧めします

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
  UITabBarController *tabb = (UITabBarController *)self.window.rootViewController;
  tabb.selectedIndex = 0;
 [[NSNotificationCenter defaultCenter] postNotificationName:@"localNotificationReceived" object:nil];
}

そしてあなたの viewController でviewDidLoad

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

今、あなたはあなたのtableViewを使ってあなたのことをすることができます

-(void) selectRows
{
    [tableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:4 inSection:0] animated:YES scrollPosition:UITableViewScrollPositionTop];
}

プログラムでセルを選択するには、これでうまくいくかもしれません:

NSIndexPath *selectedCellIndexPath = [NSIndexPath indexPathForRow:4 inSection:0];
[table selectRowAtIndexPath:selectedCellIndexPath 
                   animated:YES 
             scrollPosition:UITableViewScrollPositionTop];
[table.delegate tableView:table didSelectRowAtIndexPath:selectedCellIndexPath];

selectRowAtIndexPath はテーブル デリゲート メソッドを起動しないため、自分で呼び出す必要があります。

于 2012-04-22T11:58:22.910 に答える