在我的RootViewController中,我将图像设置为rightBarButtonItem,就像这样,但在我创建的第二个ViewController中,这个“后退”按钮将不会显示。我在模拟器和iPhone上运行它,我可以点击按钮应该出现的区域,并调用goBack {}方法。只是图像没有显示。有什么想法吗?
另外,就图像而言,我输出的方式与我导出所有其他图像的方式完全相同。所有其他人一直很好。这似乎不是图像的问题,因为我已经替换了其他几个的后退按钮图像,但没有一个显示。我很确定我正在以正确的顺序创建这些图像。无论如何,任何帮助将不胜感激。
来自我的NewGameViewController.m文件:
- (void)viewDidLoad {
[super viewDidLoad];
CGFloat startingPoint = 0.0;
CGRect bounds = self.view.bounds;
bounds.origin.y = startingPoint;
bounds.size.height -= startingPoint;
self.ivarNewGameTableView = [[UITableView alloc] initWithFrame:bounds style:UITableViewStyleGrouped];
self.ivarNewGameTableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
self.ivarNewGameTableView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
[self.view addSubview:self.ivarNewGameTableView];
UIImageView *backgroundImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"background.png"]];
self.ivarNewGameTableView.backgroundView = backgroundImageView;
UIImage *mainNavBar = [UIImage imageNamed:@"startNewGameNavBar.png"];
UIImageView *navBarView = [[UIImageView alloc] initWithImage:mainNavBar];
[navBarView setFrame:CGRectMake(0.0, 0.0, 320.0, 44.0)];
[self.navigationController.navigationBar addSubview:navBarView];
UIButton *back = [UIButton buttonWithType:UIButtonTypeCustom];
// neither one of the following lines work. I know they're supposed to be identical, but
// seen Xcode be picky.
back.frame = CGRectMake(0.0, 0.0, 54.0, 36.0);
// [back setFrame:CGRectMake(0.0, 0.0, 54.0, 36.0)];
[back addTarget:self action:@selector(goBack) forControlEvents:UIControlEventTouchUpInside];
[back setImage:[UIImage imageNamed:@"back.png"] forState:UIControlStateNormal];
[back setImage:[UIImage imageNamed:@"backTouched.png"] forState:UIControlStateHighlighted];
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithCustomView:back];
self.navigationItem.leftBarButtonItem = backButton;
}
-(void)goBack {
NSLog(@"goBack called.");
// [self.ivarNewGameTableView pushViewController:];
}
答案 0 :(得分:2)
如果您在导航堆栈中,则会为您设置后退按钮项目。正确使用backBarButtonItem
可以获得您喜欢的行为。
在您希望返回的主视图控制器上,您需要重载backBarButton
项。
UIBarButtonItem *newBackButton = [[UIBarButtonItem alloc] initWithTitle: @"Back" style: UIBarButtonItemStyleBordered target: nil action: nil];
self.navigationItem.backBarButtonItem = newBackButton;
一些代码示例on github
答案 1 :(得分:0)
确定。终于搞清楚了。问题在于创建我的新游戏视图导航栏中的这一行:
[self.navigationController.navigationBar addSubview:navBarView];
我也在Root View的导航栏中这样做了。它现在看起来像这样,在两个文件中:
UIImage *startNewGameNavBar = [UIImage imageNamed:@"startNewGameNavBar.png"];
// with the key line being this one
[self.navigationController.navigationBar setBackgroundImage:startNewGameNavBar forBarMetrics:UIBarMetricsDefault];
在noob-speak中,正如我希望更多的程序员可以使用像我这样的新手,如果你的自定义导航栏后面的按钮消失了,而你使用的代码看起来像我的例子,那是因为你不应该把它作为子视图添加。这使其成为其他一切的基础。相反,更改导航栏的背景图像,当然,图像会在......(鼓声,请)...背景中结束。 (结束鼓)
至于添加按钮图像,我刚刚创建了一个具有自定义类型的UIButton,设置了正常和突出显示状态的图像,设置按钮调用我的goBack方法,设置其帧大小,并将其分配给navigationItem的leftBarButtonItem属性:
UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom];
[backButton setImage:[UIImage imageNamed:@"back.png"] forState:UIControlStateNormal];
[backButton setImage:[UIImage imageNamed:@"backTouched.png"] forState:UIControlStateHighlighted];
[backButton addTarget:self action:@selector(goBack) forControlEvents:UIControlEventTouchUpInside];
[backButton setFrame:CGRectMake(0.0, 0.0, 54.0, 36.0)];
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:backButton];