我通过调用-initWithCustomView在UIBarButtonItem中设置了一个自定义视图。我的栏按钮项呈现得很好,但是当我点击它时,它不会调用我的目标对象上的操作。
下面是我的代码:
UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"someImage.png"]];
UIBarButtonItem *bbItem = [[UIBarButtonItem alloc] initWithCustomView:imageView];
self.navigationItem.leftBarButtonItem = bbItem;
[imageView release];
[bbItem setTarget:self];
[bbItem setAction:@selector(deselectAll)];发布于 2010-05-09 11:17:02
我不认为UIBarButtonItem的目标和操作适用于自定义视图。尝试使用UIButton而不是UIImageView,并将目标和操作应用于按钮。
Swift中的示例代码:
let button = UIButton(type: .Custom)
if let image = UIImage(named:"icon-menu.png") {
button.setImage(image, forState: .Normal)
}
button.frame = CGRectMake(0.0, 0.0, 30.0, 30.0)
button.addTarget(self, action: #selector(MyClass.myMethod), forControlEvents: .TouchUpInside)
let barButton = UIBarButtonItem(customView: button)
navigationItem.leftBarButtonItem = barButton发布于 2011-04-05 19:18:53
下面是我是如何工作的:
UIButton* infoButton = [UIButton buttonWithType: UIButtonTypeInfoLight];
[infoButton addTarget:self action:@selector(displayAboutUs) forControlEvents:UIControlEventTouchDown];
UIBarButtonItem* itemAboutUs =[[UIBarButtonItem alloc]initWithCustomView:infoButton];
…发布于 2012-06-21 23:37:25
我也有同样的问题,但是我反对为我的UIBarButtonItem使用UIButton而不是自定义视图(根据drawnonward的响应)。
或者,您可以在使用自定义视图初始化UIBarButtonItem之前将UIGestureRecognizer添加到自定义视图中;这似乎可以在我的项目中使用。
这就是我如何修改你的原始代码:
UIImageView *SOCImageView = [[UIImageView alloc] initWithImage:
[UIImage imageNamed:@"cancel_wide.png"]];
UITapGestureRecognizer *tapGesture =
[[UITapGestureRecognizer alloc] initWithTarget:self
action:@selector(deselectAll:)];
[SOCImageView addGestureRecognizer:tapGesture];
SOItem.leftBarButtonItem =
[[[UIBarButtonItem alloc] initWithCustomView:SOCImageView] autorelease];
[tapGesture release];
[SOCImageView release];https://stackoverflow.com/questions/2796438
复制相似问题