UIBarButtonItem不可点击



我有一个非常棘手的问题,经过长时间的搜索(谷歌,stackoverflow,…)我没有得到适合我的解决方案。

让我介绍一下我目前选择的建筑:

  1. 我有一个AppDelegate,它有一个UIView包含一个UINavigationController和应用程序didFinishLaunchingWithOptions:包含:

    UIView *myView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 400)];
      UIViewController *myController = [[UIViewController alloc] init];
      myController.view = myView;
    
          FSCScrumRootView * myRootView = [[FSCScrumRootView alloc] initWithNibName:@"FSCScrumRootView" bundle:[NSBundle mainBundle]];
          [myController.view addSubview:myRootView.navigation.view];
          [self.window addSubview:myController.view];
          [self.window makeKeyAndVisible];
          return YES;
        }
    
  2. 在我的FSCScrumRootView(继承自UIViewController)我init视图如下:

    - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
    { 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
    // Custom initialization
    self.navigation = [[[UINavigationController alloc] init] autorelease];
    self.scrumProjectsList = [[[FSCScrumProjectListView alloc] init] initWithNibName:@"FSCScrumProjectListView" bundle:nil];
    [navigation pushViewController:scrumProjectsList animated:YES]; 
    [navigation view]; 
    } 
    return self; 
    } 
    
  3. 在我的FSCScrumProjectListView(它是从UITableViewController继承的)我已经实现了viewDidLoad如下:

    - (void)viewDidLoad 
    { 
    [super viewDidLoad]; 
    //Set the title 
    self.navigationItem.title = @"Scrum Projects";
    UIBarButtonItem *myRefreshButton = [[[UIBarButtonItem alloc] initWithTitle:@"Refresh" style:UIBarButtonSystemItemRefresh target:self action:@selector(refreshList)] autorelease]; 
    self.navigationItem.leftBarButtonItem = myRefreshButton;
    UIBarButtonItem *myLogoutButton = [[UIBarButtonItem alloc] initWithTitle:@"Logout" style:UIBarButtonSystemItemCancel target:self action:@selector(logout)]; 
    self.navigationItem.rightBarButtonItem = myLogoutButton;
    
    //Initialize the toolbar
    toolbar = [[UIToolbar alloc] init];
    toolbar.barStyle = UIBarStyleDefault;
    //Set the toolbar to fit the width of the app.
    [toolbar sizeToFit];
    //Caclulate the height of the toolbar
    CGFloat toolbarHeight = [toolbar frame].size.height;
    //Get the bounds of the parent view
    CGRect rootViewBounds = self.parentViewController.view.bounds;
    //Get the height of the parent view.
    CGFloat rootViewHeight = CGRectGetHeight(rootViewBounds);
    //Get the width of the parent view,
    CGFloat rootViewWidth = CGRectGetWidth(rootViewBounds);
    //Create a rectangle for the toolbar
    CGRect rectArea = CGRectMake(0, rootViewHeight - toolbarHeight, rootViewWidth, toolbarHeight);
    //Reposition and resize the receiver
    [toolbar setFrame:rectArea];
    //Create a button
    UIBarButtonItem *infoButton = [[UIBarButtonItem alloc] 
                                 initWithTitle:@"Info" style:UIBarButtonItemStyleBordered target:self action:@selector(info_clicked:)];
    [toolbar setItems:[NSArray arrayWithObjects:infoButton,nil]];
    //Add the toolbar as a subview to the navigation controller.
    [self.navigationController.view addSubview:toolbar];
    //Reload the table view
    [self.tableView reloadData]; 
    }
    
  4. 这最终导致以下屏幕(因为我想拥有它):查看当前结果的iOS Mockup

问题:我现在的问题是,我只能点击刷新按钮。另外两个按钮(Info和Logout)不能点击。我不明白为什么?我哪里做错了?

非常感谢您的帮助!

尝试像第一个按钮(刷新)一样自动释放第二个两个按钮。

UIBarButtonItem *myLogoutButton = [[[UIBarButtonItem alloc] initWithTitle:@"Logout" style:UIBarButtonSystemItemCancel target:self action:@selector(logout)]autorelease];

UIBarButtonItem *infoButton = [[[UIBarButtonItem alloc] 
                             initWithTitle:@"Info" style:UIBarButtonItemStyleBordered target:self action:@selector(info_clicked:)]autorelease];

各位,我找到了我的问题的原因,我不得不说,这是一个非常非常愚蠢的问题。

这个项目的第一行要为所有的麻烦负责:

UIView *myView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 400)];

由于我创建的视图只有200x400的大小,它太小了,无法识别出现在该视图外部的任何事件(尽管所有内容都是可见的)。

如果我改变这个视图的大小,一切工作如预期:

UIView *myView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 300, 500)];

但更动态的解决方案可能是:

CGRect cgRect =[[UIScreen mainScreen] bounds];
CGSize cgSize = cgRect.size;
UIView *myView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, cgSize.width, cgSize.height)];

也许有更好的解决方案来获得动态屏幕尺寸?

相关内容

  • 没有找到相关文章

最新更新