在方法中以编程方式移动控件警告“未找到方法”和“控件可能无法响应”
Posted
技术标签:
【中文标题】在方法中以编程方式移动控件警告“未找到方法”和“控件可能无法响应”【英文标题】:Move controls programmatically in a method warns 'method not found' and 'control may not respond to' 【发布时间】:2011-05-31 02:09:06 【问题描述】:我有一个 UISegmentedView,用于向用户展示他们可以在我的程序中执行的两种计算之一的选项。如果分段控件是一种方式,它应该显示 4 个文本框及其标签,如果其他只有 3 个(并且计算也会改变)。
这一切都有效,我的问题是移动控件(我想隐藏你不需要的控件,以及移动屏幕上的控件以使其看起来不错)
我想把它放在一个方法中,然后通过 UIControl 来移动它。例如,在我的 .h
-(void) moveControlUp:(UIControl*)controlToMove;
然后,在我的 .m 中
- (void)moveControlUp:(UIControl*)controlToMove
controlToMove.frame = CGRectMake(controlToMove.frame.origin.x, controlToMove.frame.origin.y - 39, controlToMove.frame.size.width, controlToMove.frame.size.height);
然后当我真正想移动控件时(labelPointsHeader 是 UILabel,textPointsName 是文本框):
[labelPointsHeader moveControlUp];
[textPointsName moveControlUp];
这不起作用,我收到两个错误。 “UILabel 可能无法响应 '-moveControlUp'”和“方法 '-moveControlUp' 未找到(返回类型默认为 id)。当我点击这个时我崩溃了,说明“无法识别的选择器已发送到实例”。
【问题讨论】:
【参考方案1】:您在哪个类中定义了这些方法? (似乎不是一个类别)
假设你在 SomeClass 中定义了它们,那么你需要这样做:
[someInstanceOfSomeClass moveControlUp:labelPointsHeader];
现在您在第一种情况下向 UILabel 发送消息,但 UILabel 没有此方法。该方法位于您定义的任何类中。
【讨论】:
他们在同一个班级,所以只是 [self moveControlUp:labelPointsHeader] 吗? 假设 self 是正确的实例,是的。听起来您可能对类与实例(对象?)有点不清楚 自我是正确的。我理解其中的区别,只是在谈到这一点时没有想清楚。 另外,另一个警告只是由于演员阵容。以上是关于在方法中以编程方式移动控件警告“未找到方法”和“控件可能无法响应”的主要内容,如果未能解决你的问题,请参考以下文章
在 VBA 中以编程方式确定 OnClick 事件的事件处理程序
在 SwiftUI 中以编程方式移动 NavigationView 的最佳实践是啥