我正在研究一种填字游戏应用程序,以便快速运行,但在从UIButton
的{{1}}的{{1}}获取subview
的过程中遇到麻烦。 / p>
该文本字段占据了UIButton
标题应保留的空间,但是在单击textfield
时并没有单击UIButton
。
到目前为止,textfield
本身突出显示了某一列和某行的所有UIButton
。
我尝试过一些事情,例如刻划子视图的超类
UIButton
我也尝试使用
UIButtons
在var myButton: CustomButton = textfield.superclass as? CustomButton
var myObject : CustomButton? {
return view.compactMap({$0 as? CustomButton }).first
}
我有一个CustomButton.swift
,它将所有CustomButtons存储在数组中,因此我可以管理它们并检索某些CustomButtons。
class CustomButton: UIButton {
var number: Int = 0
var letter: Character?
var textField: UITextField!
var cornerLabel: UILabel!
// this init will intialize the button through programatically
override init(frame: CGRect) {
super.init(frame: frame)
textField = UITextField(frame: CGRect(x: 0, y: 0, width: 50, height: 50))
textField.translatesAutoresizingMaskIntoConstraints = false
textField.center = .zero
textField.textAlignment = .center
textField.text = ""
具有所有引用CustomButton。我正在使用MainController中的UITextFieldDelegate
ButtonStore.swift
预期的结果是在按下文本字段或抓住按下的文本字段的CustomButton时触发了CustomButton,因此我将CustomButton用作参考。
答案 0 :(得分:1)
您可以通过{p>获取superview
if let button = textField.superview as? CustomButton {
// Do what you want to here
}
答案 1 :(得分:1)
您可以通过沿着响应者链(因为UIViewController和UIView都继承自UIResponder并实现其public List<Student> findByStudent_Grades_ClassName(final String className);
方法)以一种类型安全的方式来获取任何超级视图或父视图控制器(通常):
next
使用方式:
extension UIResponder {
func firstParent<T: UIResponder>(ofType type: T.Type ) -> T? {
return next as? T ?? next.flatMap { $0.firstParent(ofType: type) }
}
}
此方法的优点是,即使不是直接父级,也可以找到特定类型的下一个父级(即,在文本字段和CustomButton之间可能有多个视图,并且在调用superview时,它仍然可以工作)不是)。