将 TableViewController 添加到现有项目

Posted

技术标签:

【中文标题】将 TableViewController 添加到现有项目【英文标题】:Adding a TableViewController to an existing project 【发布时间】:2011-07-09 21:14:34 【问题描述】:

我有一个现有的 TableViewController 如下

// TableViewController.h

@interface TableViewController : UITableViewController  NSArray *dataArray; 
@property (nonatomic, retain) NSArray *dataArray;

还有一个 navAppDelegate - 具体来说:

// navAppDelegate.h

#import <UIKit/UIKit.h>
@interface navwAppDelegate : NSObject 
<UIApplicationDelegate, UINavigationControllerDelegate> 
UIWindow *window;
IBOutlet UINavigationController *navigationController;
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) UINavigationController *navigationController;


// navAppDelegate.m
#import "navAppDelegate.h"

@implementation navigationtableviewAppDelegate
@synthesize window, navigationController;

- (void)applicationDidFinishLaunching:(UIApplication *)application
    
[window makeKeyAndVisible];
[window addSubview:[navigationController view]];

现在,我只是将文件添加到现有项目中,除了我将 (void)applicationDidFinishLaunching 的内容放在 (void)viewDidLoad 中,因为从现在开始它是视图而不是窗口(对吗?) .它不起作用,我的猜测是我必须将所有窗口调用从上面更改为视图?我在这里犯了什么根本错误? 我正在拨打电话

// StartOffHere.m

- (void)LetsGoButtonTouched 
navAppDelegate *newview = [[navAppDelegate alloc] initWithNibName:nil bundle:nil]; // I get a SIGABRT here
[[self navigationController] pushViewController: newview animated: YES];

【问题讨论】:

【参考方案1】:
- (void)LetsGoButtonTouched 
TableViewController *tableViewController = [[TableViewController alloc] init];
[[self navigationController] pushViewController:tableViewController animated: YES];

试试看。这是你想要的吗?

如果是这样,我所做的就是创建一个表视图控制器的新实例并推送它。在您的原始代码中,您试图推送无法完成的应用程序委托;应用程序委托不是视图控制器。不过,您的 UITableViewController 的子类 TableViewController 是这样的,因此您可以将其用于 pushViewController: 方法 - 并且表格视图将出现在屏幕上。

【讨论】:

【参考方案2】:

谢谢本杰明。优秀的。但它并没有完全那样工作——经过两天的努力,我设法让它运行起来。对于那些感兴趣的人,这就是我所做的:

    如果你想用 NavigationController 添加现有的 TableViewController,你只需要 TableViewController 和 DetailViewController 文件。忘记 AppDelegate。

    执行两次新文件 -> 子类化并将现有代码分别复制到相同的 TableViewController .h/.m/.xib - 和 DetailViewController .h/.m/.xib 中。

    当您进行方法调用时,您必须同时集成 TableViewController 和 NavigationController - 像这样:

    - (void)LetsGoButtonTouched 
    TableViewController *tvc = [[[TableViewController alloc] init] autorelease];
    UINavigationController *navigationController = [[[UINavigationController alloc] initWithRootViewController:tvc]autorelease];
    [self presentModalViewController:navigationController animated:YES];
    

顺便说一句,这个问题给了我提示: Add a UINavigationBar to a UITableViewController without a UINavigationController

【讨论】:

以上是关于将 TableViewController 添加到现有项目的主要内容,如果未能解决你的问题,请参考以下文章

使自定义 UI 元素不在 TableViewController 中滚动

UISearchBar 不在 TableViewController 的表视图标题中?

IOS SplitView TableViewController 查询

无法通过界面生成器将条形按钮添加到第二页

如何在 TableViewController 中实现后退导航按钮?

在 TableViewController 上添加图像直到搜索栏处于非活动状态