2013-11-22 40 views
3

是否可以打開不同的視圖控制器,具體取決於女巫桌子視圖單元格用戶點擊?我試圖做到這一點:iPhone在桌子上打開多個視圖控制器查看項目單擊

[self presentViewController:obj animated:YES completion:nil]; 

但當下一個視圖呈現,沒有導航欄,我不能回到表視圖。

編輯:

這裏是MasterViewController類,我使用

#import "MasterViewController.h" 

@interface MasterViewController() { 
    NSArray *viewArray; 
} 
@end 

@implementation MasterViewController 
@synthesize items,itemImges; 

- (void)awakeFromNib 
{ 
    if ([[[UIDevice currentDevice] systemVersion] compare:@"7" options:NSNumericSearch] != NSOrderedAscending) { 
     self.preferredContentSize = CGSizeMake(320.0, 480.0); 
    } 
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) { 
     self.clearsSelectionOnViewWillAppear = NO; 
    } 
    self.title = NSLocalizedString(@"MasterTitle",@"Options:"); 

    [super awakeFromNib]; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    items = [NSArray arrayWithObjects:@"Media Explorer",@"Live TV",@"Settings",nil]; 
    itemImges = [NSArray arrayWithObjects: 
      [UIImage imageNamed:@"listicon_guide.png"], 
      [UIImage imageNamed:@"listicon_livetv.png"], 
      [UIImage imageNamed:@"listicon_settings.png"], 
      nil]; 

// Do any additional setup after loading the view, typically from a nib. 
    self.detailViewController = (DetailViewController *)[[self.splitViewController.viewControllers lastObject] topViewController]; 

    MediaExpDetailViewController *DVCA = [self.storyboard instantiateViewControllerWithIdentifier:@"MediaExpDetailViewController"]; 
    LiveTVDetailViewController *DVCB = [self.storyboard instantiateViewControllerWithIdentifier:@"LiveTVDetailViewController"]; 
    SettingsDetailViewController *DVCC = [self.storyboard instantiateViewControllerWithIdentifier:@"SettingsDetailViewController"]; 

    //Create Array of views 
    viewArray = [NSArray arrayWithObjects:DVCA, DVCB, DVCC, nil]; 
} 

#pragma mark - Table View 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return items.count; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath]; 

    NSString *object = items[indexPath.row]; 
    UIImage *image = itemImges[indexPath.row]; 
    cell.textLabel.text = [object description]; 
    cell.imageView.image = image; 

    return cell; 
} 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    //for iPad 
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) { 
     //something goes here 
    } 
    else { //for iPhone 
     UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main_iPhone" bundle:nil]; 
     MediaExpDetailViewController *objSynergy = (MediaExpDetailViewController *)[mainStoryboard instantiateViewControllerWithIdentifier:@"MediaExpDetailViewController"]; 
     [self.navigationController pushViewController:objSynergy animated:YES]; 
    } 
} 

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
} 

@end 
+0

推(到導航控制器),而不是本 – Wain

回答

10

首先在Interface Builder中爲您的Next View控制器設置Storyboard ID,然後。

-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    // Check Row and Select Next View controller 
    if (indexPath.row == 1) 
    {  
     // Push Selected View 
     UIViewController *view1 = [self.storyboard instantiateViewControllerWithIdentifier:@"StoryboardID"]; 
     [self.navigationController pushViewController:view1 animated:YES]; 
    } 
} 
0

這是因爲

[self presentViewController:obj animated:YES completion:nil]; 

呈現新的視圖控制器模態(在現有的可視控制器的頂部)。如果你想使用你的導航控制器推到一個新的視圖控制器,你會想要使用它。當然你要確保你推送的視圖控制器嵌入在UINavigationController中。

[self.navigationController pushViewController:obj animated:YES]; 

並回答你的第一個問題,是的,它絕對有可能。只需在您的didSelectRowAtIndexPath:UITableViewDelegate方法中添加一些條件邏輯即可。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (someCondition) { 
     [self.navigationController pushViewController:obj animated:YES]; 
    }else{ 
     [self.navigationController pushViewController:otherObj animated:YES]; 
    } 
} 
+0

當我[self.navigationController pushViewController:otherObj動畫:YES];我在日誌中得到錯誤信息:2013-11-22 14:23:53.849 iAmuse [1651:c07]嵌套的推動動畫可能導致導航條損壞 2013-11-22 14:23:54.203 iAmuse [1651:c07]精加工導致處於意外狀態的導航轉換。導航欄子視圖樹可能會損壞。 2013-11-22 14:23:54.204 iAmuse [1651:c07]爲開始/結束外觀轉換的不平衡調用。 – lugonja

+0

@lugonja您在函數中調用'pushViewController:'多少次? –

+0

在我的病例陳述中只有一次。也許我在這裏錯過了一些東西。另外當我點擊項目時,我沒有得到我的obj視圖控制器,但從主/細節應用程序模板的默認視圖控制器。 – lugonja

0

默認情況下呈現的視圖控制器沒有導航欄。您必須將它們嵌入到UINavigationController中才能擁有一個。您還應該實施如何自行解除所呈現的視圖控制器,並在適當的時間調用dismissViewControllerAnimated

不過,我建議你到您的視圖控制器(帶pushViewControllerAnimated),而不是模態呈現它們,如果你不特別需要的模態功能。

相關問題