如何将自己传递到iOS中的另一个类

时间:2014-09-17 07:17:25

标签: ios uinavigationcontroller uibarbuttonitem

我必须在不同的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传递事件。

3 个答案:

答案 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];
}