2013-05-11 123 views
2

我想在UITextfield中添加一个清除按钮,但它不显示。如何添加清除按钮UITextfield?

本作的UITextField代码:

@implementation databaseEnterDataViewController 

@synthesize customer = customer_ ; 
@synthesize type = type_ ; 
@synthesize code1 = code1_ ; 
@synthesize code2 = code2_ ; 
@synthesize background, 
      changeType, 
      codeOne, 
      codeTwo, 
      customers, 
      suspendDisplayInfo, 
      tf; 


#pragma mark - 
#pragma mark Initialization 

#pragma mark - 
#pragma mark View lifecycle 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    self.customer = @"" ; 
    self.type  = @"" ; 
    self.code1 = @"" ; 
    self.code2 = @"" ; 

    self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc]initWithTitle:@"Save" style:UIBarButtonSystemItemCancel target:self action:nil]; 
    self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:nil]; 
    self.navigationItem.title = @"Enter Data"; 

    code1Field_.clearButtonMode = UITextFieldViewModeWhileEditing; 
    code2Field_.clearButtonMode = UITextFieldViewModeUnlessEditing; 
    customerField_.clearButtonMode = UITextFieldViewModeAlways; 


    [self openDB]; 
    [self createTable:@"barcodeScan" withField1:@"key" withField2:@"scanDate" withField3:@"theCustomer" withField4:@"type" withField5:@"theCode1" withField6:@"theCode2" withField7:@"discription" withField8:@"articleNr" withField9:@"batchNr" withField10:@"serialNr" withField11:@"expDate"]; 

    self.suspendDisplayInfo=false; 
    NSLog(@"%@",typeLabel_.text); 









#ifdef LOG_FILE 
    NSFileManager *fileManger = [NSFileManager defaultManager]; 
    if ([fileManger fileExistsAtPath:[self getLogFile]]) 
    { 
     [debug appendString:[[NSString alloc] initWithContentsOfFile:[self getLogFile]]]; 
     [debugText setText:debug]; 
    } 
#endif 

    dtdev=[Linea sharedDevice]; 
    [dtdev addDelegate:self]; 
    [dtdev connect]; 




    types = [[NSMutableArray alloc] init]; 
    [types addObject:@"Select barcode type"]; 
    [types addObject:@"Intervascular"]; 
    [types addObject:@"CID"]; 
    [types addObject:@"MAQUET"]; 


    [self pickerview]; 

    tf.clearButtonMode =UITextFieldViewModeAlways; 


} 




- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
    // Return the number of sections. 
    return 1; 
} 


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    // Return the number of rows in the section. 
    return 4; 
} 


// Customize the appearance of table view cells. 
- (UITableViewCell *)tableView:(UITableView *)tableView 
     cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil]; 

    // Make cell unselectable 
    cell.selectionStyle = UITableViewCellSelectionStyleNone; 

    tf = nil; 
    tf.clearButtonMode =UITextFieldViewModeAlways; 
    changeType = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    changeType.frame = CGRectMake(cell.frame.origin.x + 220, cell.frame.origin.y + 7, 80, 30); 
    [changeType setTitle:@"Change type" forState:UIControlStateNormal]; 
    changeType.backgroundColor= [UIColor clearColor]; 
    [changeType.titleLabel setFont:[UIFont systemFontOfSize:14]]; 
    [changeType addTarget:self action:@selector(clickeButton:) forControlEvents:UIControlEventTouchDown]; 


    switch (indexPath.row) { 
     case 0: { 
      cell.textLabel.text = @"Customer:" ; 
      tf = customerField_ = [self makeTextField:self.customer placeholder:@"Customer name"]; 
      [cell addSubview:customerField_]; 


      break ; 
     } 
     case 1: { 
      cell.textLabel.text = @"Type:" ; 
      tf = typeLabel_ = [self makeTextField:self.type placeholder:@"Type code"]; 
      [cell addSubview:typeLabel_]; 
      [cell addSubview:changeType]; 

      break ; 
     } 
     case 2: { 
      cell.textLabel.text = @"Code 1:" ; 
      tf = code1Field_ = [self makeTextField:self.code1 placeholder:@"Code 1"]; 
      [cell addSubview:code1Field_]; 
      break ; 
     } 
     case 3: { 
      cell.textLabel.text = @"Code 2:" ; 
      tf = code2Field_ = [self makeTextField:self.code2 placeholder:@"code 2"]; 
      [cell addSubview:code2Field_]; 
      break ; 
     } 
    } 

    // Textfield dimensions 
    tf.frame = CGRectMake(120, 12, 170, 30); 

    // Workaround to dismiss keyboard when Done/Return is tapped 
    [tf addTarget:self action:@selector(textFieldFinished:) forControlEvents:UIControlEventEditingDidEndOnExit]; 

    // We want to handle textFieldDidEndEditing 
    tf.delegate = self ; 

    return cell; 
} 





-(UITextField*) makeTextField: (NSString*)text 
        placeholder: (NSString*)placeholder { 
    UITextField*tf = [[UITextField alloc] init]; 
    tf.placeholder = placeholder ; 
    tf.text = text ; 
    tf.autocorrectionType = UITextAutocorrectionTypeNo ; 
    tf.autocapitalizationType = UITextAutocapitalizationTypeNone; 
    tf.adjustsFontSizeToFitWidth = YES; 
    tf.textColor = [UIColor colorWithRed:56.0f/255.0f green:84.0f/255.0f blue:135.0f/255.0f alpha:1.0f]; 
    return tf ; 
} 

// Workaround to hide keyboard when Done is tapped 
- (IBAction)textFieldFinished:(id)sender { 
    // [sender resignFirstResponder]; 
} 

// Textfield value changed, store the new value. 
- (void)textFieldDidEndEditing:(UITextField *)textField { 
    if (textField == customerField_) { 
     self.customer = textField.text ; 
    } 
    else if (textField == typeLabel_) { 
     self.type = textField.text ; 
    } 
    else if (textField == code1Field_) { 
     self.code1 = textField.text ; 
    } 
    else if (textField == code2Field_) { 
     self.code2 = textField.text ; 
    } 
} 

在iPhone上它看起来像这样:

enter image description here

当我添加了清除按钮这样

customerField_.clearButtonMode = UITextFieldViewModeWhileEditing;

该按钮没有出现。

我该怎么做才能看到它?

+2

它被称为'UITextFieldViewModeWhileEditing',因为该按钮仅在编辑时可见。编辑意味着您的领域是第一响应者,并且键盘已经启动。尝试'UITextFieldViewModeAlways' – 2013-05-11 09:58:34

+0

它不起作用 – Thymen 2013-05-11 10:05:36

回答

6

如果你使用UITextFieldViewModeAlways,你会看到按钮,如果文本字段的字符串不是零,或者它的长度大于0.我认为如果没有任何可以清除的东西,你不能显示清除按钮。

+0

当我在其中放入文本时,它不起作用 – Thymen 2013-05-11 10:15:34

+1

在cellForRowAtIndexPath中,您将clearButton设置为零对象,请尝试在文本字段初始化之后的情况0中将其设置在开关中。 – Mat 2013-05-11 10:26:08

+0

谢谢你的帮助 – Thymen 2013-05-11 10:32:12

3

如果您希望清除按钮始终可见,那么您需要将文本字段的clearButtonMode属性设置为UITextFieldViewModeAlways。您当前配置文本字段的方式,只有在编辑文本字段时,清除按钮才会显示。

编辑:正如Mat在注释中指出的那样,无论文本字段的clearButtonMode属性是什么值,清除按钮仅在相关时才显示,即如果有要清除的内容。如果文本字段为空,则不需要显示清除按钮。

+0

我试过,但它不起作用 – Thymen 2013-05-11 10:03:46

+3

无论如何,如果字符串长度为0,您将无法看到清除按钮。 – Mat 2013-05-11 10:03:57

+0

@Mat这是真的。我编辑了我的答案,以包含这个小而关键的细节。 – 2013-05-11 10:11:08

相关问题