我在iPhone上的一些自定义导航应用程序中有些困惑?

时间:2011-12-08 11:07:43

标签: iphone ios

我参与了http://blog.webscale.co.in/?p=150

中提供的示例代码
#import <UIKit/UIKit.h>
#import "MyTableView.h"
@interface MyTestProjectViewController : UIViewController{
    UILabel *aLabel;
    UIButton *aButton;
    MyTableView *nextView;
}

@end

@implementation MyTestProjectViewController

- (void) loadView{
    [super loadView];
    [self.view setBackgroundColor:[UIColor whiteColor]];
    aLabel = [[UILabel alloc] initWithFrame:CGRectMake(90, 100, 200, 40)];
    aLabel.text = @"Hello World";
    [aLabel setTextColor:[UIColor redColor]];
    [aLabel setBackgroundColor:[UIColor whiteColor]];
    [self.view addSubview:aLabel];

    aButton = [UIButton buttonWithType:UIControlStateHighlighted];
    aButton.frame = CGRectMake(125, 300, 70, 35);
    [aButton addTarget:self action:@selector(buttonPressed) forControlEvents:UIControlEventTouchUpInside];
    [aButton setTitle:@"Hit Me" forState:UIControlStateNormal];
    [self.view addSubview:aButton];

}

- (void)buttonPressed{
    NSLog(@"button was pressed");
    if(nextView==nil)
        nextView = [[MyTableView alloc] init];
    [self.navigationController pushViewController:nextView animated:YES];
}
@end

在buttonPressed方法中我有一些问题

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

此处MyTestProjectViewController。h实施UIViewController协议。

这意味着MyTestProjectViewController继承了UIViewController协议的所有方法。和行

  

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

表明navigationControllerMyTestProjectViewController的成员,而不是UINavigationController。 但我认为navigationControllerUINavigationController的成员函数。请帮我解决这个问题?

3 个答案:

答案 0 :(得分:1)

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

无效,因为您没有在MyTestProjectViewController.h类中创建UINavigationController对象 UINavigationController *nvc;并创造财产 @property(非原子,保留)UINavigationController * nvc;

MyTestProjectViewController.m文件中的@synthesize

@synthesize nvc;

在你的

中分配nvc
-(void)viewdidload{nvc = [[UINavigationcontroller alloc]init]}
    than use it 
[self.nvc pushViewController:nextView animated:YES];

它会在下一堂课的上面导航栏推送到下一堂课。

[self presentModalViewController:nextView animated:YES]; 它也会工作,但你不会 获取导航栏在上面。

答案 1 :(得分:0)

尝试使用:

nextView = [[MyTableView alloc] initWithNibName:@"MyTableView" bundle:nil];

而不是

nextView = [[MyTableView alloc] init];

希望有所帮助

编辑:

initWithNibName:@"MyTableView" bundle:nil

将强制代码使用MyTableView.xib

答案 2 :(得分:0)

[self。navigationController pushViewController:nextView animated:YES];

由于您的应用程序是UIViewControllerApplication,它将无法工作。最重要的UINavigationController继承自UIViewController。

如果你想看到你的下一个视图替换你的那个

 [self presentModalViewController:nextView animated:YES];