将TableViewController添加到现有项目

时间:2011-07-09 21:14:35

标签: iphone xcode uiview sdk uiapplicationdelegate

我有一个现有的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];
}

2 个答案:

答案 0 :(得分:1)

- (void)LetsGoButtonTouched {
TableViewController *tableViewController = [[TableViewController alloc] init];
[[self navigationController] pushViewController:tableViewController animated: YES];
}

试试吧。那是你想要发生的事吗?

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

答案 1 :(得分:1)

谢谢本杰明。优秀。但它并没有那么好用 - 经过两天的努力,我把它设法运行了。对于那些有兴趣的人,这就是我所做的:

  1. 如果您想使用NavigationController添加现有的TableViewController,您只需要TableViewController和DetailViewController文件。忘掉AppDelegate。

  2. 做两次新文件 - &gt;将现有代码子类化并复制到相同的TableViewController .h / .m / .xib - 和DetailViewController .h / .m / .xib中。

  3. 当您进行方法调用时,您必须集成TableViewController和NavigationController - 如下所示:

    - (void)LetsGoButtonTouched {
    TableViewController *tvc = [[[TableViewController alloc] init] autorelease];
    UINavigationController *navigationController = [[[UINavigationController alloc] initWithRootViewController:tvc]autorelease];
    [self presentModalViewController:navigationController animated:YES];
    
  4. 顺便问一下,这个问题给了我一个提示: Add a UINavigationBar to a UITableViewController without a UINavigationController