4

我是 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,不使用情节提要)

4

2 回答 2

13

UIViewController从 xib加载 a很容易。当您的 tableview 委托发送didSelectRowAtIndexPath:消息时,您可以加载 xib 并显示视图控制器,如下所示:

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

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

需要注意的一些事项:

  1. 您无需从 xib 加载视图控制器,而仅加载视图。这就是为什么在上面的代码中我使用创建视图控制器的新实例initWithNibName:bundle:
  2. 为了让所有这些在 IB 中正确连接,您将 xib 中的“文件所有者”设置为正确的视图控制器类型 (BIDDisclosureDetailViewController)。
  3. 确保也删除其中的loadView代码,尝试使用 xib 时会搞砸。

边注!你不应该在这样的方法签名的末尾有分号:

- (void)viewWillAppear:(BOOL)animated;

它被认为是不好的形式。

希望这可以帮助!

于 2013-04-10T23:37:36.257 回答
0
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{
    ViewControllerToBePushed *viewController = [[ViewControllerToBePushed alloc] initWithNibName:@"ViewControllerToBePushed" bundle:nil];

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

选择特定行时,使用上述方法推送到视图控制器

于 2013-04-11T03:52:24.267 回答