将 UITextField 适合 UITableView 单元格的最佳途径

Posted

技术标签:

【中文标题】将 UITextField 适合 UITableView 单元格的最佳途径【英文标题】:Best route to fit a UITextField to UITableView cell 【发布时间】:2013-02-25 22:27:56 【问题描述】:

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

图片:

【问题讨论】:

【参考方案1】:

我建议通过覆盖您的自定义 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];
        

【讨论】:

您能详细解释一下如何请吗? 刚刚添加了有关 layoutSubviews 方法的详细信息。我假设您已经有一个自定义 UITableViewCell? 这会影响所有子视图吗?我以编程方式设置所有子视图,这会影响所有子视图还是仅影响文本字段 只是您明确设置的 uitableviewcell 中的子视图。在示例中,我只是设置了 UITableViewCell 的内置 detailTextLabel 框架。 [super layoutSubviews] 确保其他所有内容都像以前一样绘制 只是为了确认这是一个 UIViewController 设置为 TableViewDelegate 并且所有更改都以编程方式进行,而不是 Interface Builder 和 Nibs

以上是关于将 UITextField 适合 UITableView 单元格的最佳途径的主要内容,如果未能解决你的问题,请参考以下文章

如何调整 UITextField 占位符文本以适合 UITextField 宽度?

在标签中滑动文本

有啥方法可以禁用 UITextField 的听写支持?

firstRect(for:) 在 UITextField 中返回错误值

自动调整大小时 UITextField 字体粗细变化

需要帮助创建复杂的 UIView - Swift xCode [关闭]