如何获得自定义UIView的原点X?

时间:2013-07-04 01:44:29

标签: ios uiview uikit uitextfield

我制作了自定义UITextfield并在UIToolbar中使用它。

然后在initWithFrame

之后的自定义UITextField的{​​{1}}中

我尝试在窗口中获取自定义[super initWithFrame:frame]的原点X.但我试过了

UITextField

并且所有这些都返回0.0。

但是在窗口中,self.frame.origin.x self.bounds.origin.x self.superview.frame.origin.x, self.superview.bounds.origin.x, CGPoint point = [self.superview convertPoint:self.frame.origin toView:nil]; return point.x; CGPoint point = [self.superview convertPoint:self.frame.origin fromView:self]; return point.x; CGPoint point = [self convertPoint:CGPointZero toView:[UIApplication sharedApplication].keyWindow]; return point.x 实际上位于UITextField中间的某个位置。如何获取自定义UIToolbar的原点x?

我的代码:

UITextField

编辑:

我找到了解决方案,但仍然不知道这个问题背后的原因,但如果有人能扩展这个话题,我将不胜感激。

在上面的代码中,我尝试在初始化期间打印出自定义UIView的原始X.似乎该应用程序不知道我的自定义UIView的原始点的信息。

我想过这一行

self = [super initWithFrame:frame];
if (self) {
    originalHeight = self.bounds.size.height;
    originalWidth = self.bounds.size.width;

    [self createTableView];

}
return self;

- (void)createTableView
{
    self.tableView = [[UITableView alloc] init];

    LogDebug(@"Origin x = %f", self.frame.origin.x);
    self.tableView.frame = CGRectMake(self.frame.origin.x, originalHeight + 18, originalWidth, 320);

}

我可以获得自定义UIView的原始点信息,但我错了。

我也发现了

self = [super initWithFrame:frame]

具有相同的效果

self.frame.origin.x

1 个答案:

答案 0 :(得分:0)

我读过这篇博客: Don’t Message self in Objective-C init (or dealloc)

建议在初始化期间不要在self上使用消息。我同意博客中的观点,并认为我遇到的问题是因为当自我仍处于不一致的状态时,我试图在init中发送自己的消息。我在{init}之外移动CGRectMake self.tableView方法并且代码正常工作,因为自己的框架和边界已经设置好并可以使用。