1

我想知道使 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

尽管我已经看到了隐藏这些警告的方法,但感觉这更像是一种 hack 而不是正确的方法。

将 UItextField 适合单元格的最佳方法是什么。这是我的领域:

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

它像这样输入到单元格中:

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

图片: 在此处输入图像描述

4

1 回答 1

0

我建议通过覆盖您的自定义 UITableViewCell 的 layoutSubviews 方法来做到这一点。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];
        }
于 2013-02-25T22:37:33.730 回答