0

我做了一个自定义UITextfield并在UIToolbar.

然后在initWithFrame自定义UITextField之后[super initWithFrame:frame]

我尝试UITextField在窗口中获取自定义的原点 X。但我试过了

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

并且它们都返回 0.0。

但在窗口中,UITextField实际上是在中间的某个地方UIToolbar。如何获得自定义的原点 x UITextField

我的代码:

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 的原始 X。似乎该应用程序不知道我的自定义 UIView 的原始点的信息。

我想在这条线之后

self = [super initWithFrame:frame]

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

我也发现

self.frame.origin.x

具有相同的效果

[[UIApplication sharedApplication].keyWindow convertPoint:self.bounds.origin fromView:self].x;
4

1 回答 1

0

我读过这个博客: 不要在 Objective-C init (or dealloc) 中给自己发消息

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

于 2013-07-04T07:18:51.857 回答