簡體   English   中英

使用XCode 4將單元格推入UISCrollView時將單元格推到DetailView時崩潰

[英]Crash when pushing cell to DetailView when it's a UISCrollView using XCode 4

我使用以下代碼從TableView移至DetailView:

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[tableView deselectRowAtIndexPath:indexPath animated:TRUE];
  if(indexPath.row==0) {

      //Initialize the detail view controller and display it.
      Detail1ViewController *firstDetailController = [[Detail1ViewController alloc] initWithNibName:@"Detail1ViewController" bundle:nil];
      [self.navigationController pushViewController:firstDetailController animated:YES];
      [firstDetailController release];
}
else if(indexPath.row==1) {

    //2nd view
}
else if(indexPath.row==2) {

    //3rd view
}
}

情節提要中的Detail1ViewController只是一個UIScrollView,其后沒有UIView。

這是Detail1ViewController.h:

#import <UIKit/UIKit.h>

@interface Detail1ViewController : UIViewController {
 IBOutlet UIScrollView *detail1Scroller;
}

@end

並加載.m:

- (void)viewDidLoad
{
[super viewDidLoad];
[detail1Scroller setScrollEnabled:YES];
[detail1Scroller setContentSize:CGSizeMake(320,1100)];
// Do any additional setup after loading the view.
}

我已經從Connections Inspector中的“ detail1Scroller”到UISCrollView建立了連接,並將“ Detail1ViewController”作為Identity Inspector中的Detail1ViewController的類編寫。 但是當我進入詳細視圖時,應用程序崩潰了!

我已經注意到,在我遵循的教程中,UIScrollView放置在UIView上,而我在我的項目中並未做到這一點。 因此,我試圖用UIView內的UIScrollView創建一個TestViewController,但是“ detail1Scroller”插座沒有在連接檢查器中顯示,就像在本教程中一樣! 有人可以幫我解決這個問題,也可以弄清楚我是否應該將UIScrollView與后面的UIView一起使用。

故事板是一種配置視圖控制器實例,並通過segue自動或使用代碼手動反復實例化它們的方法。 在情節提要中設計視圖控制器時,不是在設計類,而是在設計類的特定實例。 在情節提要中具有相同視圖控制器類的兩個實例且視圖布局不同是合法的。

這意味着,如果您直接分配視圖控制器類的實例,則它不會與您在情節提要中指定的所有UI一起提供。 這段代碼實際上就是在發生什么:

Detail1ViewController *firstDetailController = [[Detail1ViewController alloc] initWithNibName:@"Detail1ViewController" bundle:nil];
[self.navigationController pushViewController:firstDetailController animated:YES];
[firstDetailController release];

即使您沒有在Xcode中設計XIB / NIB,也要指定NIB名稱,這也帶來了一些困惑。

要分配在情節提要中設計的視圖控制器的新副本,應使用-[UIStoryboard InstantiateViewControllerWithIdentifier:]方法。 標識符值應與故事板身份檢查器中的值匹配。

您的代碼應如下所示:

Detail1ViewController *firstDetailController = [[self storyboard] instantiateViewControllerWithIdentifier:/* my identifier */];
[self.navigationController pushViewController:firstDetailController animated:YES];

如果您將帶故事板的視圖控制器與此代碼一起使用,則還應該考慮使用segue來啟動此過渡。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM