我似乎无法覆盖UITextField leftViewRectForBounds方法

时间:2011-03-17 15:52:15

标签: iphone user-interface uitextfield uilabel

大图:这就是我想要完成的。发短信给某人。 UI / UX看起来应该类似于: enter image description here

所以,目前,我正在使用带有3个单元格的UITableView。前两个(“To:”和“From:”)高44px。我将UITextField放在UITableViewCell的“contentView”中。一切都是好的。我可以让用户编辑单元格的内容。

现在,我使用leftView属性显示带有文本“To:”的UILabel。它工作但“To”标签总是在UITextField的最左边(如下面的img所示): enter image description here

因此,根据SDK文档。左视图模式由此方法决定: leftViewRectForBounds:

根据讨论:

  

您不应该调用此方法   直。如果你想放置   左侧覆盖视图不同   位置,您可以覆盖此方法   并返回新的矩形。

所以,我试过压倒但没有取得多大成功。如果有人有任何代码片段,我将不胜感激。在下图中,我将“From”设置为“From”,这是“黑客”一点点,但我想正确地做到这一点。这就是我的尝试:

// override leftViewRectForBounds method:
- (CGRect)leftViewRectForBounds:(CGRect)bounds{
    CGRect leftBounds = CGRectMake(bounds.origin.x + 30, 0, 45, 44);
    return leftBounds;
}

和它的小变种,它似乎不起作用所以任何帮助表示赞赏。感谢!!!

2 个答案:

答案 0 :(得分:4)

你可以让你的课程如下

@interface MyTextField : UITextField
{
   //Declare your variable  here    
}
@end

@implementation MyTextFiled

// override leftViewRectForBounds method:
- (CGRect)leftViewRectForBounds:(CGRect)bounds{
    CGRect leftBounds = CGRectMake(bounds.origin.x + 30, 0, 45, 44);
    return leftBounds;
}

使用MyTextField而不是UITextField。

答案 1 :(得分:0)

如果您没有将textField作为customtextfield,则不会调用该方法。要覆盖此方法,您必须使用继承UITextField的自定义textField类。