Tom*_*myG 1 iphone xcode objective-c uinavigationbar uinavigationcontroller
我有一个视图控制器,我希望能够通过导航栏上的右上角"完成"按钮解除.我没有使用uinavcontoller,但只是在我的viewDidLoad中添加了这样的导航栏:
bar = [[UINavigationBar alloc] init];
Run Code Online (Sandbox Code Playgroud)
在.h:
IBOutlet UINavigationBar *bar;
Run Code Online (Sandbox Code Playgroud)
当然,连接IB上的导航栏.
然后我尝试在viewDidLoad中添加一个导航项,但没有任何反应:
rightButton = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonSystemItemDone target:nil action:nil];
UINavigationItem *item = [[UINavigationItem alloc] initWithTitle:@"Title"];
item.rightBarButtonItem = rightButton;
item.hidesBackButton = YES;
[bar pushNavigationItem:item animated:NO];
Run Code Online (Sandbox Code Playgroud)
请注意 - 这里有几个问题,但没有一个回答这个问题.
谢谢您的帮助!
如果您已经在IB中拥有它,则不希望在代码中分配/初始化该栏.这将创建它的第二个版本,消息可能会出现偏差.如果您将条形图放入IB中的视图中,最简单的方法是将"完成"按钮放在那里.首先,您将要使用UINavigationItem而不是UINavigationBar.将UIBarButtonItem拖到UINavigationItem的右侧,将文本从Item更改为Done,然后选择样式.然后,您将创建一个IBAction方法来执行您希望按钮执行的操作(关闭视图).然后,只需将按钮的选择器(在IB中)连接到IBAction方法,这将完成您想要的操作.
如果您希望/需要以编程方式执行此操作,您将只使用以下内容.
rightButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(dismissView:)];
navigationItem.rightBarButtonItem = rightButton;
[rightButton release];
Run Code Online (Sandbox Code Playgroud)
你也需要一种dismissView:方法.
- (IBAction)dismissView:(id)sender {
// do something;
}
Run Code Online (Sandbox Code Playgroud)
编辑:要以编程方式执行此操作,首先要在头文件中添加导航栏
UINavigationBar *navBar;
Run Code Online (Sandbox Code Playgroud)
如果您计划允许方向更改,则只需要执行此操作.由于你没有使用IB,所以没有必要将它作为一个插座,所以我们在标题中完成了.
在实现文件中,您要调用以下内容:
- (void)viewDidLoad {
navBar = [[UINavigationBar alloc] init];
UINavigationItem *navItem = [[[UINavigationItem alloc] initWithTitle:@"some title"] autorelease];
UIBarButtonItem *done = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(dismissView:)] autorelease];
navItem.rightBarButtonItem = done;
navBar.items = [NSArray arrayWithObject:navItem];
[self.view addSubview:navBar];
}
- (void)viewDidAppear:(BOOL)animated {
navBar.frame = CGRectMake(0, 0, self.view.frame.size.width, 44);
}
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
navBar.frame = CGRectMake(0, 0, self.view.frame.size.width, 44);
}
- (void)dealloc {
[navBar release];
}
Run Code Online (Sandbox Code Playgroud)
首先创建实例并将它们放在视图中.一旦出现视图并且程序已知帧大小,它就会调整导航栏的大小(进而调整其子视图的大小)到适当的大小.然后,只要方向改变,它就会相应地调整大小.我测试过这只是为了确保所有这些都是好的信息,它对我来说很好,所以它也应该对你有好处.希望它可以帮助你
| 归档时间: |
|
| 查看次数: |
11693 次 |
| 最近记录: |