2013-11-25 3 views
0

У меня есть две кнопки для добавления и удаления текстовых полей. Добавление работ отлично, но когда я нажимаю кнопку «Удалить», удаляется только последнее добавленное текстовое поле. Вот два моих метода:Проблема при удалении текстового поля

-(void)addTextField { 
    keyTextField = [[UITextField alloc] initWithFrame:CGRectMake(10, yAxisDistance, 150, 30)]; 
    keyTextField.borderStyle = UITextBorderStyleRoundedRect; 
    keyTextField.placeholder = @"Key Value"; 
    keyTextField.delegate = self; 
    [self.view addSubview:keyTextField]; 

    valueTextField = [[UITextField alloc] initWithFrame:CGRectMake(165, yAxisDistance, 150, 30)]; 
    valueTextField.borderStyle = UITextBorderStyleRoundedRect; 
    valueTextField.placeholder = @"Value"; 
    valueTextField.delegate = self; 
    [self.view addSubview:valueTextField]; 
    yAxisDistance = yAxisDistance+35; 
} 

-(void)deleteTextField { 
    [keyTextField removeFromSuperview]; 
    [valueTextField removeFromSuperview]; 
    yAxisDistance = yAxisDistance-35; 
} 

Я знаю, что это небольшая проблема, но я очень новичок в этом поле, поэтому любезно помогите.

+0

Вы забыли сказать, чего вы хотите достичь? Что означает * deleteTextField *? – rdurand

+0

Установить тег каждого UITextField и удалить с помощью тега. –

+0

Или, если вы сделали текстовые поля как свойства в своем интерфейсе, обращайтесь к ним с помощью self. –

ответ

0

хранить последний TextField в ваших переменных keyTextField и valueTextField. Поэтому, когда вы вызываете свой deleteTextField, последние оба будут удалены. вы должны отслеживать, какие текстовые файлы вы хотите точно удалить.

, например, вы могли бы дать всему вашему TextFields ряд тегов при их создании: сначала создать ИНТАС счетчика:

@implementation YourClass { 
    int tagcounter; 
} 

в методе инициализации установить свой счетчик:

tagcounter = 0; 

в ваш addTextField:

keyTextField.tag = tagcounter++; 
valueTextField.tag = tagcounter++; 

, когда кнопка удаления является tapp ed, вы должны знать теги текстового поля и передавать их методу deleteTextField. Там вы можете сделать что-то вроде:

-(void)deleteTextFieldWithTag:(int)tagnumber { 
for (UIView *view in [self.view subviews]) 
{ 
    if ([view isKindOfClass:[UITextField class]]) 
    { 
     if (view.tag == tagnumber || view.tag == tagnumber+1) { 
      [view removeFromSuperview]; 
    } 
} 
} 
+0

пробовал это, но все же удалял только последнее добавленное текстовое поле. – Newbee

+0

вы должны предоставить все текстовые поля разных тегов, а не каждую пару 1 и 2., так что у вас есть пары, такие как 1,2 и 3,4 и 5,6 и так далее ... – thorb65

+0

Я изменил пример ... – thorb65

1

Используйте этот код для удаления определенного текстового поля из UIView. Но сначала вам нужно установить тег каждого UITextField, когда вы создаете или добавляете его в поле зрения.

for (UITextField* textField in view.subviews) 
{ 
    if(textField.tag== 1) 
    { 
      [textField removeFromSuperview]; 
    } 
} 
+0

Если у нас есть объявление экземпляра UITextField, тогда что нужно проверить здесь с использованием значения тега? –

+0

все еще не работает. – Newbee

+0

@Newbee мой код работает для меня ... нормально, я посылаю вам свой пример кода, который работает на меня. Сравните ваш код с ним. Ссылка для скачивания: http://ge.tt/4AN5tM31/v/0?c –

1

К сожалению, что раз я не понимаю вашу проблему ...

я сделал с этим: Объявить один

NSMutableArray * allTextfieldArray;

и инициализируется в

viewdidload

метод .. сейчас делают:

-(void)addTextField { 
    keyTextField = [[UITextField alloc] initWithFrame:CGRectMake(10, yAxisDistance, 150, 30)]; 
    keyTextField.borderStyle = UITextBorderStyleRoundedRect; 
    keyTextField.placeholder = @"Key Value"; 
    keyTextField.delegate = self; 
    [self.view addSubview:keyTextField]; 

    valueTextField = [[UITextField alloc] initWithFrame:CGRectMake(165, yAxisDistance, 150, 30)]; 
    valueTextField.borderStyle = UITextBorderStyleRoundedRect; 
    valueTextField.placeholder = @"Value"; 
    valueTextField.delegate = self; 

    [self.view addSubview:valueTextField]; 

    yAxisDistance = yAxisDistance+35; 

    [allTextfieldArray addObject:keyTextField]; 
    [allTextfieldArray addObject:valueTextField]; 

} 


if ([allTextfieldArray count]>0) { 
    UITextField *txtField =  [allTextfieldArray lastObject]; 
    [allTextfieldArray removeLastObject]; 

    [txtField removeFromSuperview]; 
    txtField = nil; 


    UITextField *txtField2 =  [allTextfieldArray lastObject]; 
    [allTextfieldArray removeLastObject]; 

    [txtField2 removeFromSuperview]; 
    txtField2 = nil; 

    yAxisDistance = yAxisDistance-35; 

} 
1

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

  1. Открыть выходы, которые подключены к текстовому полю в IB. В левой части редактора должны быть серые точки внутри кругов. Правильны ли они для обоих текстовых полей?

  2. Установите точку останова внутри метода deleteTextField и проверьте два текстовых поля. Убедитесь, что оба свойства не ноль.

PS: Вам не нужно добавлять метки к вашему виду, используя свойства отлично и даже лучше, на мой взгляд. Причина вашей проблемы - это что-то еще.Кроме того, вам не нужно removeFromSuperview, вы также можете setHidden:YES.

Смежные вопросы