2
给定任意一组的2个或更多视图(UIView
),我想确定这些视图的(最接近的)共同父项是什么。 Swift中最有效的算法是什么?Swift中的共同父视图
基于这些层次:
┌─────┐
│ A │
└─────┘
▲
┌────────────┴────────────┐
│ │
┌─────┐ ┌─────┐ ┌─────┐
│ B │ │ C │ │ X │
└─────┘ └─────┘ └─────┘
▲ ▲ ▲
┌──────┴──────┐ ┌──────┴──────┐ │
│ │ │ │ │
┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐
│ D │ │ E │ │ F │ │ G │ │ Y │ │ Z │
└─────┘ └─────┘ └─────┘ └─────┘ └─────┘ └─────┘
- 如果没有提供意见,返回nil。
- 如果提供1个视图,则返回
superview
或零。 - 如果任何视图没有
superview
(例如“A”,“X”或“Z”),则返回nil。 - 如果视图不属于同一层次结构(例如“A”或“X”层次结构),则返回nil。
例子:基于
// no views
[].commonParent() // nil
// 1 view
[D].commonParent() // B
// siblings
[D,E].commonParent() // B
// child/parent
[D,B].commonParent() // A
// cousins
[D,F].commonParent() // A
// > 2 views
[D,E,F].commonParent() // A
// with root view
[D,A].commonParent() // nil
// unrelated hierarchies
[D,Y].commonParent() // nil
// unrelated view
[D,Z].commonParent() // nil
是的,'UIView'。尽管这同样适用于NSView。 –
具体而言,我正在寻找一种使用Swift的算法(即不是Objective-C)。据我所知,UIKit中没有任何东西可以帮助确定一个共同的父视图。 –
为什么不使用Objective-C?由于它是关于UIKit的,可以采用类似的方法。 UIView有一个方法'isDescendantOfView:'可以用于这个。因此,在通过第一个视图的'superView'进行迭代时,检查另一个是否是后代。 – Larme