iOS:根据UIButtons对兄弟姐妹的位置对其进行排序?

时间:2015-03-05 09:41:06

标签: ios objective-c arrays sorting subview

我有一个NSMutableArray,名为self.tappableButtonsUIButtons,它们共享相同的父视图。有时它们会重叠,我很乐意根据它们相对于彼此的顺序对数组进行排序(从最顶层的按钮开始到层次结构中最底层的按钮)。实现这一目标的最简单方法是什么?

我基本上使用快速枚举来检查我的自定义平移手势识别器中的当前触摸是否属于按钮界限。问题是,如果两个按钮重叠,它将返回枚举时数组中第一个按钮,而不是重叠中最顶层的按钮。

//Search through all our possible buttons
for (UIButton *button in self.tappableButtons) {
     //Check if our tap falls within a button's view
        if (CGRectContainsPoint(button.bounds, tapLocation)) {
            return button;
        }    
}

1 个答案:

答案 0 :(得分:1)

最简单的方法(不知道更多代码)可能会使用subviews订单来确定您触控的最顶层按钮。

UIView* buttonParentView = ....
NSEnumerator* topToBottom = [buttonParentView.subviews reverseObjectEnumerator];

for (id theView in topToBottom) {
     if (![self.tappableButtons containsObject: theView]) {
         continue;
     }

     UIButton* button = (UIButton*)theView;
     //Check if our tap falls within a button's view
     if (CGRectContainsPoint(button.bounds, tapLocation)) {
         return button;
     }    
}

如果此功能执行了很多而你的self.tappableButtons保持相对稳定,或者你的父视图有一个不在self.tappableButtons的子视图,那么简单地使用你的功能可能会更好tappableButtons首先根据它们在父母子视图中的显示位置。