Uitableview 为什么赢了';如果此UIButton显示为我的LeftBarButtonim,则UIButtonim似乎设置正确

Uitableview 为什么赢了';如果此UIButton显示为我的LeftBarButtonim,则UIButtonim似乎设置正确,uitableview,uibutton,uinavigationbar,uibarbuttonitem,Uitableview,Uibutton,Uinavigationbar,Uibarbuttonitem,在我的RootViewController中,我将图像设置为与此完全相同的RightBarButtonim,但在我创建的第二个ViewController中,此“后退”按钮不会显示。我在模拟器和iPhone上运行它,我可以点击按钮应该显示的区域,然后调用goBack{}方法。只是图像没有显示。有什么想法吗 此外,就图像而言,我导出它们的方式与导出所有其他图像的方式完全相同。所有其他人都工作得很好。这些图像似乎没有问题,因为我用后退按钮图像替换了其他几个图像,但没有一个显示出来。我很确定我是按正确

在我的RootViewController中,我将图像设置为与此完全相同的RightBarButtonim,但在我创建的第二个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:];
}

如果您在导航堆栈中,则会为您设置“后退”按钮项。正确使用
backbarbuttonim
以获得您喜欢的行为

在要返回的主视图控制器上,需要重载
backBarButton

UIBarButtonItem *newBackButton = [[UIBarButtonItem alloc] initWithTitle: @"Back" style: UIBarButtonItemStyleBordered target: nil action: nil];

self.navigationItem.backBarButtonItem = newBackButton;

一些代码示例

正常。终于弄明白了。问题在于创建新游戏视图导航栏时的这一行:

[self.navigationController.navigationBar addSubview:navBarView];
我在我的根视图的导航栏中也这样做了。现在在两个文件中都是这样的:

UIImage *startNewGameNavBar = [UIImage imageNamed:@"startNewGameNavBar.png"];

// with the key line being this one
[self.navigationController.navigationBar setBackgroundImage:startNewGameNavBar forBarMetrics:UIBarMetricsDefault];
在noob中,我希望更多的程序员会使用我这样的noob,如果您在自定义导航栏后面的按钮消失时遇到问题,并且您使用的代码与我的示例类似,这是因为您不应该将其作为子视图添加。这就把它放在了其他一切之上。相反,更改导航栏的背景图像,当然,图像会在…(drumroll,请)…背景中结束。(完)

至于添加按钮图像,我刚刚创建了一个自定义类型的UIButton,将图像设置为正常和高亮显示状态,将按钮设置为调用我的goBack方法,设置其帧大小,并将其分配给navigationItem的LeftBarButtonim属性:

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];

我很抱歉。我只是不明白这件事。我尝试了上述代码的各种不同组合,以及将按钮设置为自定义图像的几种不同方法,但都没有效果。有人能澄清一下上述方法吗?那么,对于“您想返回的”主视图控制器,您是指我的rootviewcontroller吗?另外,我不熟悉“过载”这个词。我尝试了上述代码的每一种不同方式,我总是会看到导航栏出现,背景显示在导航栏下方,但蓝色的、非定制的、苹果提供的后退按钮仍然隐藏在导航栏下方。当我点击按钮应该位于的区域时,它现在会按照我的需要将我带回我的RootViewController,但是在我点击按钮和过渡动画开始之前,不会显示任何图像。这真让我沮丧。最后,我是否必须以某种方式将提供的后退按钮图像设置为不可见,以便它不显示该动画?