UIControl addTarget:action:forControlEvents:除非与超级视图相同大小,否则无法正常工作
Posted
技术标签:
【中文标题】UIControl addTarget:action:forControlEvents:除非与超级视图相同大小,否则无法正常工作【英文标题】:UIControl addTarget:action:forControlEvents: not working unless same size as superview 【发布时间】:2014-10-20 10:37:09 【问题描述】:例如
UIButton *b = [Uibutton alloc...
[b addTarget:self action:@selector(doSomething:) forControlEvents:UIControlEventTouchUpInside];
// Using Masonry to add constraints:
[b makeConstraints:^(MASConstraintMaker *make)
// Match superview - works
make.top.left.bottom.right.equalTo(superview);
// Smaller than superview - doesn't work
make.top.left.right.top.equalTo(superview);
make.height.equalTo(@32);
];
有什么想法吗?
我能找到的唯一参考问题是this question的答案,但细节上含糊不清。
【问题讨论】:
【参考方案1】:我不熟悉 Masonry MASConstraintMaker,但我认为如果您使用 button.frame 也会发生同样的情况?或者由于某种原因您不能使用 button.frame?
如果您的按钮在它的超级视图之外,它将不起作用..这导致我建议(尽管有点天真和简单化)您的按钮被设置在它的超级视图之外...可能是因为它正在使用 superview.frame而不是 superview.bounds .. 这是您需要用于 superView 框架引用的内容
button.frame = CGRectMake(button.superview.bounds.origin.x, button.superview.bounds.origin.y, button.superview.bounds.size.width, 32.0f);
【讨论】:
谢谢。只是为了澄清一下:它不是特定于 Masonry 的,而只是视图的框架不包含在 superview 中。以上是关于UIControl addTarget:action:forControlEvents:除非与超级视图相同大小,否则无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章
UIControl.appearance().addTarget 停止在 Swift 4 上工作
Swift - UIControl addTarget 不起作用
UIControl addTarget:action:forControlEvents:除非与超级视图相同大小,否则无法正常工作