簡體   English   中英

如何使用NIB文件推送UIViewController

[英]How to Push an UIViewController with NIB file

我是iOS開發的新手,我很頭疼,不理解可能很容易的東西。 基本上我正在使用UITableViewController轉到另一個UITableViewController,但后來我需要從第二個UITableViewController轉到UIViewController。 我希望這個UIViewController有一個.xib文件供我快速創建UI,但我似乎無法找到從第二個UITableViewController推送到這個UIViewController的方法。 我設法以編程方式顯示標簽,但不是來自.xib的UI。

這是與程序標簽一起使用的代碼:

- (void)tableView:(UITableView *)tableView
accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath
{
    self.detailController.title = @"Disclosure Button Pressed";
    NSString *selectedMovie = self.movies[indexPath.row];
    NSString *detailMessage = [[NSString alloc]
                                initWithFormat:@"This is details for %@.",
                                selectedMovie];
    self.detailController.message = detailMessage;
    self.detailController.title = selectedMovie;
    [self.navigationController pushViewController:self.detailController
                                        animated:YES];
}

這是UIViewController的.m,它以編程方式顯示UILabel。

@implementation BIDDisclosureDetailViewController
- (UILabel *)label;
{
    return (id)self.view;
}
- (void)loadView;
{
    UILabel *label = [[UILabel alloc] init];
    label.numberOfLines = 0;
    label.textAlignment = NSTextAlignmentCenter;
    self.view = label;
}
- (void)viewWillAppear:(BOOL)animated;
{
    [super viewWillAppear:animated];
    self.label.text = self.message;
}
@end

基本上我不想以編程方式創建任何UIObject,我需要一個.xib來創建UI。

謝謝

(iOS 6,不使用故事板)

從xib加載UIViewController很容易。 當您的tableview委托發送didSelectRowAtIndexPath:消息時,您可以加載xib並顯示視圖控制器,如下所示:

BIDDisclosureDetailViewController *controller = [[BIDDisclosureDetailViewController alloc] initWithNibName:@"BIDDisclosureDetailView" bundle:nil];

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

有些事情需要注意:

  1. 您不從xib加載視圖控制器,只加載視圖。 這就是為什么在上面的代碼中我使用initWithNibName:bundle:創建一個新的視圖控制器實例initWithNibName:bundle:
  2. 為了使所有這些在IB中正確連接,您可以將xib中的“文件所有者”設置為正確的視圖控制器類型(BIDDisclosureDetailViewController)。
  3. 確保刪除你在那里的loadView代碼,它會在嘗試使用xib時搞砸。

邊注! 你不應該在這樣的方法簽名的末尾有分號:

- (void)viewWillAppear:(BOOL)animated;

它被認為是糟糕的形式。

希望這可以幫助!

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{
    ViewControllerToBePushed *viewController = [[ViewControllerToBePushed alloc] initWithNibName:@"ViewControllerToBePushed" bundle:nil];

[self.navigationController pushViewController:viewController animated:YES];
}

使用上述方法在選擇特定行時按下以查看控制器

暫無
暫無

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

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