0

问题是我的 UITextField 包装类没有让 UITextField 出现在 UITableViewCell 中(但是,常规的 UITextField 视图可以正常工作):

在此处输入图像描述

这是我的自定义 UITextField:

标题:

#import <UIKit/UIKit.h>

@protocol TUTextFieldDelegate <NSObject>

- (BOOL)textField:(UITextField *)textField
shouldChangeCharactersInRange:(NSRange)range
replacementString:(NSString *)string;

- (BOOL)textFieldShouldClear:(UITextField *)textField;

- (void)textFieldDidBeginEditing:(UITextField *)textField;

- (void)textFieldDidEndEditing:(UITextField *)textField;

@end

@interface TUTextField : UIControl <UITextFieldDelegate>

@property (nonatomic, assign) BOOL fixedDecimalPoint;
@property (nonatomic, assign) id <TUTextFieldDelegate>delegate;

@property (nonatomic, assign) UIKeyboardType keyboardType;
@property (nonatomic, strong) NSString *placeholder;
@property (nonatomic, assign) UITextBorderStyle borderStyle;
@property (nonatomic, assign) BOOL adjustsFontSizeToFitWidth;
@property (nonatomic, assign) UITextFieldViewMode clearButtonMode;
@property (nonatomic, strong) NSString *text;

- (id)initWithTextField:(UITextField *)textField;
- (id)initWithFrame:(CGRect)frame;

@end

执行:

#import "TUTextField.h"

@interface TUTextField ()

@property (nonatomic, strong) UITextField *textField;

@end

@implementation TUTextField

- (id)initWithTextField:(UITextField *)textField
{
    self = [super initWithFrame:textField.frame];
    if (self) {
        self.textField = textField;
        _textField.delegate = self;

        _fixedDecimalPoint = NO;
    }
    return self;
}

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        self.textField = [[UITextField alloc] initWithFrame:frame];
        _textField.delegate = self;
        [self addSubview:_textField];

        _fixedDecimalPoint = NO;
    }
    return self;
}

- (void)setKeyboardType:(UIKeyboardType)keyboardType {
    _textField.keyboardType = keyboardType;
}

- (void)setPlaceholder:(NSString *)placeholder {
    _textField.placeholder = placeholder;
}

- (void)setBorderStyle:(UITextBorderStyle)borderStyle {
    _textField.borderStyle = borderStyle;
}

-(void)setAdjustsFontSizeToFitWidth:(BOOL)adjustsFontSizeToFitWidth {
    _textField.adjustsFontSizeToFitWidth = adjustsFontSizeToFitWidth;
}

-(void)setClearButtonMode:(UITextFieldViewMode)clearButtonMode {
    _textField.clearButtonMode = clearButtonMode;
}

-(void)setText:(NSString *)text {
    _textField.text = text;
}

/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
    [self addSubview:self.textField];
}
*/

- (void)viewDidLoad {
    [self addSubview:_textField];
}

- (void)viewWillAppear {
    [self addSubview:_textField];
}


- (BOOL)textField:(UITextField *)textField
shouldChangeCharactersInRange:(NSRange)range
replacementString:(NSString *)string
{
    if ([_delegate respondsToSelector:@selector(textField:shouldChangeCharactersInRange:replacementString:)]) {
        return [_delegate textField:textField shouldChangeCharactersInRange:range
                  replacementString:string];
    }
    return YES;
}

- (BOOL)textFieldShouldClear:(UITextField *)textField {
    if ([_delegate respondsToSelector:@selector(textFieldShouldClear:)]) {
        return [_delegate textFieldShouldClear:textField];
    }
    return YES;
}

- (void)textFieldDidBeginEditing:(UITextField *)textField {
    if ([_delegate respondsToSelector:@selector(textFieldDidBeginEditing:)]) {
        [_delegate textFieldDidBeginEditing:textField];
    }
}

- (void)textFieldDidEndEditing:(UITextField *)textField {
    if ([_delegate respondsToSelector:@selector(textFieldDidEndEditing:)]) {
        [_delegate textFieldDidEndEditing:textField];
    }
}

@end

这是将我的自定义包装器添加到表视图的代码:

    } else if (indexPath.row == 1) {
            cell.textLabel.text = @"Tax Rate";

            if (!_textField) {
                UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(220.0, 8.0, 60.0, 26.0)];
                textField.clearButtonMode = UITextFieldViewModeWhileEditing;
                textField.adjustsFontSizeToFitWidth = YES;
                textField.borderStyle = UITextBorderStyleRoundedRect;
                textField.keyboardType = UIKeyboardTypeDecimalPad;
                textField.placeholder = kTaxRateDefault;

                _textField = [[TUTextField alloc] initWithTextField:textField];
                _textField.delegate = self;

                // retrieve saved settings
                _taxRate = [[SettingsSingleton sharedManager] taxRate];
                if (![_taxRate isEqualToString:@""])
                    _textField.text = _taxRate;
            }

            UILabel *percentSign = [[UILabel alloc] initWithFrame:CGRectMake(285.0, 6.0, 20.0, 26.0)];
            percentSign.text = @"%";
            percentSign.backgroundColor = [UIColor clearColor];

            [cell addSubview:_textField];
            [cell addSubview:percentSign];
        }
    }

任何帮助表示赞赏!

4

1 回答 1

0

我不认为这是扩展 UITextField 的最佳方式。

而不是在它下面创建一个带有 UITextField 的 NSObject 你应该这样说:

界面:

@interface UITextField (extendedUITextField) {

    // Variables

}

//Methods

@end

执行:

@implementation UITextField (extendedUITextField) 

     // Method implement

@end

希望这可以帮助。

于 2013-04-15T16:01:44.073 回答