将子视图添加到窗口,以及切换可见性的特定键?

时间:2010-07-12 02:40:10

标签: objective-c cocoa cocoa-touch uiview

我已经想出了如何创建一个新的UI元素,我触摸并使用[self.view addSubview:[uilabel reference]]添加它。但是,如果我点击相同的位置,它只会在当前的子视图之上添加另一个子视图。

我能够为我正在制作的网格的每个部分创建一个唯一的密钥(从而放置子视图)。有什么办法可以用钥匙标记这个子视图,这样我可以切换它的可见性吗?

以下是一些代码:

CGRect rectNote = CGRectMake(notePosX, notePosY, noteFrameWidth - 2, noteFrameHeight - 3);

UILabel *rectNoteLabel = [[UILabel alloc] initWithFrame:rectNote];

//label settings

[self.view addSubview:rectNoteLabel];

显然我计算了标签的位置,它可能被用作子视图的关键字?

2 个答案:

答案 0 :(得分:1)

UIview有一个“tag”属性,所以是的,你可以标记一个视图并在以后再次找到它。

http://developer.apple.com/iphone/library/documentation/uikit/reference/UIView_Class/UIView/UIView.html#//apple_ref/doc/uid/TP40006816-CH3-SW25

然后你可以调用[self.view viewWithTag:blah]来取回它。

如果您只想弄清楚您是否存在点击的子视图,那么Jonathan Grynspan已经提到了-hitTest:

http://developer.apple.com/iphone/library/documentation/uikit/reference/UIView_Class/UIView/UIView.html#//apple_ref/doc/uid/TP40006816-CH3-BBCCAICB

答案 1 :(得分:0)

您可以通过将-hitTest:发送到父视图来测试该位置是否存在子视图。

在控件类中保留可变数组或设置可能更容易,并在实际添加新视图之前对其内容进行测试。 (迭代遍历数组的费用与迭代父视图的子视图的费用相同,在任何一种情况下,它可能都不会很重要。)