2013-02-25 1 views
1

Мне интересно, что является лучшим способом сделать UITextField подходящим для ячейки UITableView.Лучший маршрут для установки UITextField в ячейку UITableView

Я использовал этот метод до:

@implementation UITextField (custom) 
- (CGRect)textRectForBounds:(CGRect)bounds { 
    return CGRectMake(bounds.origin.x + 0, bounds.origin.y + 10, 
         bounds.size.width - 30, bounds.size.height - 16); 
} 
- (CGRect)editingRectForBounds:(CGRect)bounds { 
    return [self textRectForBounds:bounds]; 
} 
@end 

Но это вызывает вопрос:

Category is implementing a method which will also be implemented by its primary class 

Хотя я видел способы, чтобы скрыть эти предупреждения, он чувствует, как это больше хака чем правильный метод.

Каков наилучший способ поместить UItextField в ячейку. Это мое поле:

// Username field 
usernameField = [[UITextField alloc] initWithFrame:(CGRectMake(10, 0, 300, 43))]; 
usernameField.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 

Это вход в клетку, как это:

if (indexPath.row == 0) { 
     [cell.contentView addSubview:usernameField]; 
    } 

Изображение: enter image description here

ответ

0

Я бы предложил делать это путем подменяют пользовательский метод layoutSubviews UITableViewCell в. Гораздо проще там imo. Что-то вроде:

- (void)layoutSubviews 
    { 
     [super layoutSubviews]; 
     float w, h; 

     w = (int)(self.frame.size.width - 30);   
      h = (int)(self.frame.size.height - 16); 

     [self.detailTextLabel setFrame:CGRectMake(0, 10, w, h)]; 
    } 

Вот фрагмент инициализации пользовательских ячейки

@interface MyCustomCell: UITableViewCell { 

    } 
    @end 

    @implementation MyCustomCell 


    - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier 
    { 
     if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { 
      } 
      return self; 
    } 

Вот фрагмент, где будет создан пользовательский ячейки:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

     static NSString *CellIdentifier = @"Cell"; 

     MyCustomCell *cell = (MyCustomCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
     if (cell == nil) { 
      cell = [[[MyCustomCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease]; 
     } 
+0

Не могли бы вы объяснить подробнее о том, как, пожалуйста, ? – StuartM

+0

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

+0

Это влияет на все подпункты? Я программно настраиваю все мои подзаголовки, это повлияет на все их или только текстовые поля – StuartM

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