Пользовательский делегат для UITextView

Я создаю подкласс UITextView, и у меня все работает, но я также хочу выполнить дополнительную работу при вызове методов UITextView Delegate. вот что у меня есть до сих пор.

Танаатекствиев.h

#import <UIKit/UIKit.h>

#import "ThaanaDelegate.h"


@interface ThaanaTextView : UITextView  {

    @private
    ThaanaDelegate * _thaanaDelegate;

}

ThanaaTextView.m

#import "ThaanaTextView.h"


@implementation ThaanaTextView

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
       //do some extra stuff to textview
       //set delegate
       self.delegate = _thaanaDelegate;



    }
    return self;
}


}

@end

и вот мой класс делегата

ThaanaDelegate.h

 #import <UIKit/UIKit.h>
 #import <Foundation/Foundation.h>


@interface ThaanaDelegate : NSObject <UITextViewDelegate> {

    NSMutableArray* _lines;
}

   +(NSString*) reverseText:(NSString*) text withFont:(UIFont*) font carretPosition:(NSRange*) cpos Lines:(NSMutableArray*) lines Bounds:(CGRect) bounds;
-(void) setText:(NSString*) txt textview:(UITextView *)textView;


@end

ThaanaDelegate.m

 -(BOOL) textView:(UITextView*) textView shouldChangeTextInRange:(NSRange) range replacementText:(NSString*) text {
    //delegate method i want to do things in

    return NO;
}



-(void) setText:(NSString*) txt textview:(UITextView *)textView {

    //stuff
    return txt;
}

компилируется и работает без ошибок. но функции делегата никогда не вызываются. что мне не хватает.


person Jinah Adam    schedule 13.06.2012    source источник


Ответы (1)


Когда вы запускаете ThanaTextView, делегат еще не установлен.

self.delegate = _thaanaDelegate;

_thaanaDelegate на данный момент равен нулю. Следовательно, вы устанавливаете его на ноль.

Редактировать:

ThaanaTextView *ttv = [[ThaanaTextView alloc] initWithFrame:textViewFrame];
ttv.delegate = someDelegateHere;
person CrimsonDiego    schedule 13.06.2012
comment
Вы можете установить его ПОСЛЕ вашего метода инициализации (не в вашем методе, а перед его вызовом). Или используя собственный метод инициализации, например initWithDelegate... - person user1226119; 14.06.2012
comment
Вам нужно будет установить его после создания объекта. @user1226119 user1226119 устанавливать свойства после выделения, но до инициализации - очень плохая идея. - person CrimsonDiego; 14.06.2012
comment
@CrimsonDiego, боже мой, я устал, когда писал это. Очевидно, вы должны установить его ПОСЛЕ alloc. - person user1226119; 14.06.2012
comment
Я знаю это. Я говорил, что устанавливать его после alloc, но перед init — плохая идея, поскольку это противоречит соглашениям Cocoa. Усталость — не повод огрызаться на кого-то. Пожалуйста, читайте внимательнее в следующий раз. - person CrimsonDiego; 14.06.2012