2015-08-07 3 views
0

У меня есть UITableView с UITableViewCells, которые содержат UITextfield, но когда я тестирую его на других устройствах, у него нет ограничений. Я хочу, чтобы он держался справа от UITableViewCell, как я могу добавить это программно?Ограничения UITextfield в UITableViewCell

nameField.translatesAutoresizingMaskIntoConstraints = NO; 

NSLayoutConstraint *constraint2 = [NSLayoutConstraint constraintWithItem:nameField attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:cell attribute:NSLayoutAttributeRight multiplier:1.0 constant:0]; 
      [nameField addConstraint:constraint2]; 

      [cell.contentView addSubview:nameField]; 
+0

Это не работает ... Я использую AutoLayout –

+0

1), чтобы ожидать от программных ограничений работы, вы должны хотя бы попытаться их добавить. Это не очевидно из вашего кода, как вы это сделали. 2) если на «других» устройствах у вас нет каких-либо ограничений, на каких устройствах вы работаете? – slxl

+0

Я не добавил никаких ограничений программно, так как не знаю, как я буду продолжать делать это с моей конфигурацией здесь. –

ответ

0

Попробуйте добавить следующее:

NSLayoutConstraint *constraint = [NSLayoutConstraint constraintWithItem:nameField attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:cell attribute:NSLayoutAttributeRight multiplier:1.0 constant:0] 
[textField addConstraint:constraint]; 

Отказ от ответственности: Разве это все в этом текстовом редакторе для ответа, поэтому он не может быть синтаксически правильно, но это общая идея. Если вам нужна помощь, просто дайте мне знать!

+0

Спасибо за answe Bill, хотя этот код, похоже, падает при загрузке представления. –

+0

У вас есть трассировка стека? Как я уже сказал, я, возможно, что-то ошибся или получил что-то не так, потому что я никогда не подключался к отладчику, но эта общая идея (если все это синтаксически правильно) должна делать это программно, вот как я добавляю 99% моих ограничения. –

+0

Я добавил свой код в сообщение –

0

Я надеюсь, что это поможет вам. // Вы можете установить выравнивание UITextField на правой стороне

UITextField *nameField = [[UITextField alloc] initWithFrame:CGRectMake(120, 8, 185, 30)]; 
nameField.adjustsFontSizeToFitWidth = YES; 

[nameField setFont:[UIFont fontWithName:@"Roboto-Regular" size:15]]; 

[nameField setUserInteractionEnabled:NO]; 
[nameField setDelegate:self]; 
[nameField setTextColor:[UIColor lightGrayColor]]; 

cell.textLabel.text = @"Server Name"; 
      [nameField setUserInteractionEnabled:YES]; 
      nameField.textAlignment=NSTextAlignmentRight; // you can set right alignment 
      nameField.text = [serverInfo valueForKey:@"name"]; 
      [textFields addObject:nameField]; 
      [cell.contentView addSubview:nameField]; 
+0

Это приведет к выравниванию текста внутри элемента управления справа. OP хочет, чтобы весь вид придерживался правой стороны ячейки. – Losiowaty

+0

автор спросил о выравнивании UITextField внутри ячейки, но не о тексте внутри UITextField – slxl

+0

@slxl я могу помочь ему, я должен решить его проблему, так почему вы уменьшаете мой ответ. –

0

Попробуйте использовать следующий код (заменяющий мое поле с вашим). Я использую его, чтобы сосредоточиться на моем текстовом представлении, но я изменил горизонтальное ограничение, чтобы оно скорее оправдывало его.

 cell = [tableView dequeueReusableCellWithIdentifier:@"yourCustomCell"]; 
    [[cell.contentView subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)]; 
    UILabel *myLabel = [[UILabel alloc]init]; 
    myLabel.text = @"Detail"; 
    //Create your text view here 
    [cell.contentView addSubview:myLabel]; 
    [cell.contentView addSubview:nameField]; 
    myLabel.translatesAutoresizingMaskIntoConstraints = NO; 
    nameField.translatesAutoresizingMaskIntoConstraints = NO; 
    NSMutableArray *result = [[NSMutableArray alloc] initWithCapacity:3]; 
    NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(myLabel, nameField); 
    NSString *verForName = [NSString stringWithFormat:@"V:|[nameField]|"]; 
    NSString *verForLabel = [NSString stringWithFormat:@"V:|[myLabel]|"]; 
    NSString *horForView = [NSString stringWithFormat:@"H:|[myLabel]->=1-[nameField]-15-|"]; 
    [result addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:verForLabel options:0 metrics:nil views:viewsDictionary]]; 
    [result addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:verForName options:0 metrics:nil views:viewsDictionary]]; 
    [result addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:horForView options:0 metrics:nil views:viewsDictionary]]; 

    [cell.contentView addConstraints:result];  } 
+0

Код сбой: 'Невозможно разобрать формат ограничения: Невозможно интерпретировать' | ' символ, потому что связанный вид не имеет супервизора –

+0

Не могли бы вы разместить свой код? Это сообщение указывает, что вы не добавили свое поле в cell.contentview. – Gjchoza

+0

Я разместил код, который я использую в своем сообщении –

0

Вам не хватает nameField.translatesAutoresizingMaskIntoConstraints = NO; если вы проводите автоспуск.

И после того, что вы просто должны создать constrint:

NSLayoutConstraint *constraint = [NSLayoutConstraint constraintWithItem:nameField 
                attribute:NSLayoutAttributeRight 
                relatedBy:NSLayoutRelationEqual 
                toItem:cell attribute:NSLayoutAttributeRight 
                multiplier:1.0 constant:0] 
[namefield addConstraint:constraint]; 

и ограничения для размеров - высоты и ширины.

+0

Привет, это также сбой: «Невозможно настроить макет с иерархией представления, не подготовленной для ограничения». –

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