我必须在不同的ViewControllers上多次创建一个按钮并将事件添加到它。我做了什么,我创建了一个类来处理它们。我将UINavigationController传递给它并为其添加一个按钮。但没有任何反应。我的意思是按钮不显示。我将我的Util类称为
MyUtil *util = [[MyUtil alloc];
[util initWithNavAndAddBackButton:self.NavigationController];
//现在它应该显示我创建的自定义后退按钮但不显示。
//我按值传递导航并为其添加一个按钮,但不知道它为什么没有显示它。
MyUtil.h
-(void)initWithNavAndAddBackButton:(UINavigationController *)nav;
MyUtil.m
-(void)initWithNavAndAddBackButton:(UINavigationController *)nav
{
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
[btn setImage:[UIImage imageNamed:@"icon_back.png"] forState:UIControlStateNormal];
// [btn setTarget:self action:@selector(popView:) forControlEventTouchUPInside];
//我怎样才能传递自我(Android中的上下文),它要为哪个活动调用
[button setFrame:CGRectMake(0,0,36,20);
UIBarButtonItem *barbtn = [[UIBarButton alloc] initWithCustomView:btn];
nav.navigationController.navigationItem.leftBarButtonItem = barbtn;
}
-(void) popView:(UINavigationController *)nav
{
[nav popViewControllerAnimated:YES];
}
我遇到的问题
首先我传递UINaviagation
并将UIBarbutton
添加到它,但它没有显示。当我在每个ViewController类中编写相同的代码时。它运行准确。我只想在一个单独的类中执行此操作,如处理程序。
而且我也想推动并参与那项活动。我怎样才能传递自我,或者我的意思是这个类如何知道该动作属于哪个类的目标。我如何为ViewContoller传递事件。
答案 0 :(得分:0)
尝试从MyUtil返回导航控制器实例到ViewController。
<强> MyUtil.h 强>
-(UIBarButtonItem *)initWithNavAndAddBackButton();
<强> MyUtil.m 强>
-(UIBarButtonItem *)initWithNavAndAddBackButton()
{
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
[btn setImage:[UIImage imageNamed:@"icon_back.png"] forState:UIControlStateNormal];
[button setFrame:CGRectMake(0,0,36,20);
UIBarButtonItem *barbtn = [[UIBarButton alloc] initWithCustomView:btn];
return barbtn;
}
<强> ViewController.m 强>
MyUtil *util = [[MyUtil alloc];
self.navigationItem.rightBarButtonItem = [util initWithNavAndAddBackButton:self.NavigationController];
因为当你传递一个对象时,它不会被引用传递。
答案 1 :(得分:0)
MyUtil *util = [[MyUtil alloc];
[util initWithNavAndAddBackButton:self.NavigationController];
应该是
MyUtil *util = [[MyUtil alloc] init];
[util initWithNavAndAddBackButton:self.NavigationController];
您与Android一起使用。在iOS中是不同的。
self.navigationController
负责推送和弹出viewcontrollers
如果您想在任何地方使用自定义按钮,可以使用委托方法
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
// Make sure your segue name in storyboard is the same as this line
if ([[segue identifier] isEqualToString:@"YOUR_SEGUE_NAME_HERE"])
{
// Get reference to the destination view controller
YourViewController *vc = [segue destinationViewController];
// Pass any objects to the view controller here, like...
[vc setMyButtonHere:button];
}
}
答案 2 :(得分:0)
<强> MyUtil.m 强>
+ (void)setNavigationItem:(UINavigationItem *)navItem forViewController:(UIViewController *)controller
{
UIImage *image = [UIImage imageNamed:@"icon_back.png"];
UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithImage:image
style:UIBarButtonItemStylePlain
target:controller
action:@selector(popView)];
navItem.leftBarButtonItem = item;
}
<强> ViewController.m 强>
[MyUtil setNavigationItem:self.navigationItem forViewController:self];
- (void)popView
{
[self.navigationController popViewControllerAnimated:YES];
}