子类工具栏

时间:2016-04-09 08:03:41

标签: ios objective-c xcode uitoolbar

我在键盘顶部添加了一个工具栏,每当用户点击TextView时它就会出现,它还有许多按钮可以更改并与TextView交互,例如,更改文本字体。 / p>

我现在要做的是创建工具栏的子类,以便可以在其他TextView上使用,但我的问题是:

如何在Toolbar子类中使用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 {
  ...
}

2 个答案:

答案 0 :(得分:1)

您的CustomUIToolbar类应符合UITextViewDelegate协议:

@interface CustomUIToolbar : UIToolbar <UITextViewDelegate> {

然后,您需要将CustomUIToolbar子类指定为textView:

的委托
self.textView.delegate = self.customTabbar;

<强>更新

我认为这个问题是因为你的工具栏实例是在调用委托方法之前发布的。尝试创建一个属性以确保变量保留在内存中。所以而不是:

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

创建一个属性:

@property(nonatomic, strong) CustomUIToolbar *tool;

并初始化它:

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

答案 1 :(得分:0)

您可以为UIextView创建另一个类并在其中导入工具栏类,并从此类调用bar按钮单击方法。并在需要的地方使用此类的textview。