我是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,不使用故事板)
答案 0 :(得分:13)
从xib加载UIViewController
很容易。当您的tableview委托发送didSelectRowAtIndexPath:
消息时,您可以加载xib并显示视图控制器,如下所示:
BIDDisclosureDetailViewController *controller = [[BIDDisclosureDetailViewController alloc] initWithNibName:@"BIDDisclosureDetailView" bundle:nil];
[self.navigationController pushViewController:controller animated:YES];
有些注意事项:
initWithNibName:bundle:
loadView
代码,在尝试使用xib时会搞砸。旁注!你不应该在方法签名的末尾加上分号:
- (void)viewWillAppear:(BOOL)animated;
它被视为不良形式。
希望这有帮助!
答案 1 :(得分:0)
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
ViewControllerToBePushed *viewController = [[ViewControllerToBePushed alloc] initWithNibName:@"ViewControllerToBePushed" bundle:nil];
[self.navigationController pushViewController:viewController animated:YES];
}
使用上述方法推送到选择特定行时查看控制器