2012-06-22 2 views
1

HiI очень новичок в разработке iphone. Я разработчик java-фона. Так что мой подход похож на java.Как вызвать глобальную функцию из другой глобальной функции с одним параметром в iphone?

Здесь мое требование состоит в том, что я хочу вызвать одну глобальную функцию из каждого контроллера вида. и оттуда я передаю self.navigationController в качестве параметра. В этой функции я добавляю некоторый бутон. когда пользователь нажимает на эту кнопку, он должен вызывать еще одну функцию и должен иметь тот же объект, что и параметр.

, пожалуйста, дайте мне указания. я попытался следующим образом, но он показывает ошибку в compiletime

Utilities.m

 +(void)setBacKButton:(UINavigationController *)navigationController 
    { 

     for(UIButton *btn in navigationController.navigationBar.subviews){ 
      if([btn isKindOfClass:[UIButton class]]){ 
       [btn removeFromSuperview]; 
      } 
     } 

     UIButton *btn2=[UIButton buttonWithType:UIButtonTypeCustom]; 
     btn2.frame=CGRectMake(708, 0, 50, 54); 
     [btn2 setImage:[UIImage imageNamed:@"btn_back.png"] forState:0]; 
     [btn2 setImage:[UIImage imageNamed:@"btn_back_h.png"] forState:UIControlStateSelected]; 
     // here i need to call bellow function when click on this button 
//[btn2 addTarget:self action:@selector() forControlEvents:UIControlEventTouchUpInside]; 
     [navigationController.navigationBar addSubview:btn2]; 
    } 
    +(void)gotoBack:(UINavigationController *)navigationController 
    { 
     [navigationController popViewControllerAnimated:YES]; 
    } 

и я называю эту функцию из моего ViewController в

[Utilities setBacKButton:self.navigationController]; 

скажите, пожалуйста, как мы можем достичь этого

ответ

1

Просто сделать навигацию контроллер в приложении «Делегат» ... и нажмите на контроллер своего вида, используя это. Следующий код ...

//YourAppdelegate.h 
    UINavigationController *navController; 
    @property(nonatomic,retain)UINavigationController *navController; 

    // your appdelegate.m 

    navController = [UINavigationController alloc]initWithRootViewController:self.viewController]; 
    self.window.rootViewController = navController ; 

и теперь сделать вашу глобальную функцию здесь (в appdelegate.m) как .......

- (void)setBacKButton:(UINavigationController *)navigationController{ 
    // put your code here 
    } 

теперь называем его из контроллеров просмотреть, где у вас есть необходимо, как это ...

// yourViewController.m 

импорт «yourAppdelegate.h»

и когда вы должны вызвать эту функцию просто написать эти две строки ..

YourAppdelegate *appdelegate = (YourAppdelegate*)[[UIApplication sharedApplication]delegate]; 

    [appdelegate setBacKButton:self.navigationController]; 

может это поможет вам

2

добавьте функцию в свой делегат приложения и вызовите эту функцию во всех своих контроллерах представления. С объектом appdelegate.then с этой функцией добавьте одну кнопку с идентификатором sen дер и делать все, что захочет в методе.

+0

спасибо за повтор, но я хочу реализовать один метод для поп-экрана. для этого мне нужен объект navigationcontroler, так как я могу получить этот объект контроллера навигации? –

+0

просто инициализируйте объект контроллера навигации в приложении appdelegate и нажмите на консольный контроллер для этого контроллера навигации. Это основной принцип работы на основе навигации. Вам нужен объект контроллера просмотра только в этой функции и нажмите его на навигацию appdelegate контроллер. – hacker

1

Вы хотели бы создать категорию UINavigationBar.

UINavigationBar + customBackButton.h

#import <UIKit/UIKit.h> 

@interface UINavigationBar (customBackButton) 
- (void)setCustomBackButton; 
@end 

UINavigationBar + customBackButton.m

#import "UINavigationBar+customBackButton.h" 

@implementation UINavigationBar (customBackButton) 

- (void)setCustomBackButton 
{ 
    for(UIButton *btn in self.subviews) 
    { 
     if([btn isKindOfClass:[UIButton class]]) 
     { 
      [btn removeFromSuperview]; 
     } 
    } 

    UIButton *btn2=[UIButton buttonWithType:UIButtonTypeCustom]; 
    btn2.frame=CGRectMake(708, 0, 50, 54); 
    [btn2 setImage:[UIImage imageNamed:@"btn_back.png"] forState:0]; 
    [btn2 setImage:[UIImage imageNamed:@"btn_back_h.png"] forState:UIControlStateSelected]; 
    // here i need to call bellow function when click on this button 
    //[btn2 addTarget:self action:@selector() forControlEvents:UIControlEventTouchUpInside]; 
    [self addSubview:btn2]; 
} 

@end 

Затем в любом контроллере представления вы можете импортировать его как этот

#import "UINavigationBar+customBackButton.h" 

[self.navigationController.navigationBar setCustomBackButton]; 
+0

Как этот подход действительно перемещается назад к предыдущему виду при нажатии кнопки? – dbau

0

После ответа от @ewiinnnnn выше, я придумал способ использовать пользовательские категории и имеют обратную кнопку навигации, как и ожидалось:

// UIViewController+customBackButton.h 

#import <UIKit/UIKit.h> 

@interface UIViewController (customBackButton) 
- (void)setCustomBackButton; 
@end 


// UIViewController+customBackButton.m 

#import "UIViewController+customBackButton.h" 

@implementation UIViewController (customBackButton) 


// sets my custom back button 
- (void)setCustomBackButton 
{ 

    UINavigationItem *navItem = self.navigationItem; 

    UIButton *customButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
    UIImage *addButton = [UIImage imageNamed:@"backButton.png"]; 
    UIImage *addButtonSelected = [UIImage imageNamed:@"backButtonHighlighted.png"]; 

    [customButton setBackgroundImage:addButton forState:UIControlStateNormal]; 
    [customButton setBackgroundImage:addButtonSelected forState:UIControlStateHighlighted]; 
    customButton.frame=CGRectMake(0.0, 0.0, addButton.size.width, addButton.size.height); 
    [customButton addTarget:self action:@selector(navigateBack) forControlEvents:UIControlEventTouchUpInside]; 
    UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithCustomView: customButton]; 


    navItem.leftBarButtonItem = barButtonItem; 


} 

// the action that is triggered when the back button is pressed 
- (void)navigateBack { 
    [self.navigationController popViewControllerAnimated:YES]; 
} 


@end 

И затем в пределах UIViewController:

// MyViewController.m 

#import "UIViewController+customBackButton.h" 

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 

    // add back button to navcontroller 
    [self setCustomBackButton]; 

} 
Смежные вопросы