Вопрос:

Как установить цель и действие для UIBarButtonItem во время выполнения

ios objective-c iphone swift uibarbuttonitem

82571 просмотра

9 ответа

637 Репутация автора

Пробовал это, но работает только для UIButton:

[btn setTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside];
Автор: Sharief Источник Размещён: 25.02.2010 11:36

Ответы (9)


96 плюса

126780 Репутация автора

Решение

Просто установите UIBarButtonItem's targetи actionсвойства напрямую.

Автор: Ole Begemann Размещён: 25.02.2010 11:41

14 плюса

230 Репутация автора

Я столкнулся с подобной проблемой ... Я предполагаю, что вы имеете в виду, что если ваш UIButton не является частью вашего UITabBar для вызова btnClicked, то он работает надлежащим образом. Если это проблема, которую вы предлагаете, проверьте метод btnClicked и измените его следующим образом:

-btnClicked:(id)sender

в

-(void) btnClicked:(id)sender

что, и объявить btnClicked в заголовочном файле ...

Для чего это стоит, вот как я настраиваю кнопку в tabbarbuttonitem:

UIBarButtonItem *exampleButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"button.png"] style:UIBarButtonItemStylePlain target:self action:@selector(btnClicked:)];
Автор: J. Dave Размещён: 28.02.2010 04:56

-5 плюса

194 Репутация автора

Вы можете попробовать метод addTarget.

Автор: David Carvalho Размещён: 09.11.2010 10:21

7 плюса

3409 Репутация автора

  UIBarButtonItem *barListBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem: UIBarButtonSystemItemAdd target:self action:@selector(getTruckStopListAction)];   
    self.navigationItem.rightBarButtonItem = barListBtn;
    [barListBtn release];
Автор: sinh99 Размещён: 14.03.2012 07:01

20 плюса

3065 Репутация автора

UIBarButtonItem не имеет тот же метод addTarget, поэтому вы должны установить их напрямую следующим образом

btn.target = self;
btn.action = @selector(barButtonCustomPressed:);

...

// can specify UIBarButtonItem instead of id for this case
-(IBAction)barButtonCustomPressed:(UIBarButtonItem*)btn 
{
    NSLog(@"button tapped %@", btn.title);
}
Автор: mihai Размещён: 11.09.2014 08:36

0 плюса

492 Репутация автора

Если вы программно добавляете UIBarButtonItem, лучший способ установить цель и действие - инициализировать кнопку одним из следующих способов:

UIBarButtonItem *customButton = [[UIBarButtonItem alloc] initWithImage:<#(UIImage)#> style:<#(UIBarButtonItemStyle)#> target:<#(id)#> action:<#(SEL)#>

UIBarButtonItem *customButton = [UIBarButtonItem alloc] initWithTitle:<#(NSString *)#> style:<#(UIBarButtonItemStyle)#> target:<#(id)#> action:<#(SEL)#>

UIBarButtonItem *customButton = [UIBarButtonItem alloc] initWithImage:<#(UIImage *)#> landscapeImagePhone:<#(UIImage *)#> style:<#(UIBarButtonItemStyle)#> target:<#(id)#> action:<#(SEL)#>
Автор: Adam Cooper Размещён: 06.01.2015 08:47

9 плюса

1608 Репутация автора

Если вам нужно это достаточно много раз в своем коде, хорошо бы продолжить и расширить то, UIBarButtonItemчто я сделал ниже в Swift. :)

import UIKit

extension UIBarButtonItem {
    func addTargetForAction(target: AnyObject, action: Selector) {
        self.target = target
        self.action = action
    }
}

Как пример, с self как a UIViewController, вы просто позвоните:

self.myBarButtonItem.addTargetForAction(self, action: #selector(buttonPressed(_:))
Автор: serenn Размещён: 11.08.2015 02:56

1 плюс

470 Репутация автора

@ wp42 Это работает сегодня.

Отличный способ сделать это в target-C - добавить категорию в класс UIBarButtonItem:

.h файл

#import <UIKit/UIKit.h>

@interface UIBarButtonItem (addons)

-(void)addTarget:(id)target andAction:(SEL)action;

@end

.m файл

#import "UIBarButtonItem+addons.h"

@implementation UIBarButtonItem (addons)

-(void)addTarget:(id)target andAction:(SEL)action{
   [self setTarget:target];
   [self setAction:action];
}

@end

На практике:

[myBtn addTarget:self andAction:@selector(myFunction:)];
Автор: Itai Spector Размещён: 08.09.2016 07:58

9 плюса

3473 Репутация автора

Установите targetи actionвашегоUIBarButtonItem

Свифт 5 и 4

button.target = self
button.action = #selector(action)

@objc func action (sender:UIButton) {
    print("action")
}
Автор: Haroldo Gondim Размещён: 10.10.2017 12:40
Вопросы из категории :
32x32