2016-04-09 3 views
0

Я добавил панель инструментов на клавиатуре, она появляется каждый раз, когда пользователь нажимает на TextView, у нее также есть несколько кнопок, которые изменяются и взаимодействуют с TextView, например, изменяя текст шрифт.Панель инструментов подкласса

То, что я пытаюсь сделать, это создать подкласс панели инструментов, так что он может быть использован на других TextViews, но моя проблема:

Как использовать методы TextView делегата внутри панели инструментов подкласс?

Вот мой текущий код (не весь код, чтобы не делать пост слишком большой):

.h

#import <UIKit/UIKit.h> 

@interface CustomUIToolbar : UIToolbar{ 
    UIButton *btn1; 
    UIButton *btn2; 
    UIButton *btn3; 
} 

.m

@implementation CustomUIToolbar 

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 

     UIBarButtonItem *one = ... 
     UIBarButtonItem *two = ... 
     UIBarButtonItem *three = ... 

     self.barStyle = UIBarStyleDefault; 
     self.layer.borderWidth = 1; 
     self.layer.borderColor = [[UIColor lightGrayColor] CGColor]; 
     self.items = [NSArray arrayWithObjects:one,placeholder,two,three,four,five,nil]; 
     [self sizeToFit]; 
    } 
    return self; 
} 

-(void)actionBtn3:(UIButton *) barBtnItem{ 
    ... 
} 

-(void)actionBtn2:(UIButton *) barBtnItem{ 
    ... 
} 

-(void)actionBtn1:(UIButton *) barBtnItem{ 
    ... 
} 

// And the UITextView Delegate Methods 

- (BOOL) textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { 
    ... 
    return YES; 
} 

- (void)textViewDidChangeSelection:(UITextView *)textView { 
    ... 
} 

ответ

1

Ваш класс CustomUIToolbar должен соответствовать протоколу UITextViewDelegate:

@interface CustomUIToolbar : UIToolbar <UITextViewDelegate> { 

Затем вам нужно присвоить CustomUIToolbar подкласс в качестве делегата TextView:

self.textView.delegate = self.customTabbar; 

Update:

I подумайте о проблеме, потому что ваш экземпляр панели инструментов выпущен до вызова метода делегата. Попробуйте сделать свойство, чтобы убедиться, что переменная остается в памяти. Таким образом, вместо:

UIToolbar *tool = [[CustomUIToolbar alloc] init]; 

Создать свойство:

@property(nonatomic, strong) CustomUIToolbar *tool; 

и инициализировать его:

self.tool = [[CustomUIToolbar alloc] init]; 
+0

это не работает – Bruno

+0

Можете ли вы показать код, в котором вы инициализируете свой собственный экземпляр вкладки и назначаете делегат? –

+0

UIToolbar * tool = [[CustomUIToolbar alloc] init]; self.textView.inputAccessoryView = инструмент; self.textView.autocorrectionType = UITextAutocorrectionTypeNo; – Bruno

0

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

+0

вы можете дать мне пример? – Bruno