0

tabbarcontrollersplitview コントローラーの詳細ビューとして を作成しました。、シミュレーターのアイコンをクリックしてビューを変更できますが、プログラムでビューを変更することはできませitem1ん。item2

null で印刷しようとすると取得viewcontrollersnslogます。マスタービューで:

@property (strong, nonatomic) TabBarRootViewController *detailViewController;
- (void)viewDidLoad
{
    [super viewDidLoad];
    self.detailViewController=[[TabBarRootViewController alloc] init];
//tried also
self.detailViewController = (TabBarRootViewController *)[self.splitViewController.viewControllers objectAtIndex:1];

}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    //this sends object info to detail
    if (indexPath.section==0) {
        //send row number
       NSNumber *i = [NSNumber numberWithInteger:indexPath.row];
        NSLog(@"Selected index %@",i);

        self.detailViewController.detailItem = i;
    }
}

詳細(タブバー):

@property (strong, nonatomic) id detailItem;

if (self.detailItem) {
    NSInteger i=[self.detailItem integerValue];
    NSLog(@"recieved integer is %i",i);

    //tried this
    self.tabBarController.selectedIndex=i;
    self.tabBarController.selectedViewController = [self.tabBarController.viewControllers objectAtIndex:i];

    //list of viewcontrollers
    NSArray *array;
    array = [[self tabBarController] viewControllers];
    NSLog(@"array %@",array);

}

ここに画像の説明を入力

NSLOG:
recieved integer is 1
array (null)

プログラムでビューを変更するにはどうすればよいですか?

ありがとう、

S

4

3 に答える 3

0

タブ バー コントローラーは のようですnil。ストーリーボードと正しくリンクされていない可能性がありますか?

于 2013-03-15T21:35:13.757 に答える
0

この問題は、Tabbar コントローラーへの正確なポインターを取得できませんでした。

ナビゲーション コントローラーを削除し、タブバー コントローラーのみを残しました[topcontroller]。マスター ビューと appdelegate のリクエストも削除しました。

したがって、最終的な作業コードは

appdelegate:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.
    return YES;
}

masterview: - (void)viewDidLoad

{
    [super viewDidLoad];

    self.detailViewController = (TabBarRootViewController *)[self.splitViewController.viewControllers objectAtIndex:1];

}

tabbarcontroller (詳細コントローラー) で

@property (strong,nonatomic) UITabBarController *rootController;

        self.rootController= (TabBarRootViewController *)[self.splitViewController.viewControllers objectAtIndex:1];
        self.rootController.selectedIndex=i;
于 2013-03-17T19:07:02.840 に答える
0

performSegueWithIdentifier:sender:現在のコントローラーで使用する必要があります。

これは、コントローラーがストーリーボードによって制御され、状態などを維持する必要があるためです。

ストーリーボード エディターでセグエに ID を付与する必要があり、独自の init を使用できないことに注意してください。代わりにオーバーライドprepareForSegue:sender:してプロパティを挿入する必要があります。

幸運を。

于 2013-03-16T12:25:27.763 に答える