在方法中以编程方式移动控件警告“未找到方法”和“控件可能无法响应”

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 的最佳实践是啥

如何在UITextView中以编程方式移动光标?

如何在 ios 应用程序中以编程方式移动到第二个视图?

如何在 WebBrowser 中以编程方式提交没有提交按钮的表单

在循环中以编程方式创建具有相同名称的 SKSpriteNodes 上使用 repeatActionForever?