有没有一种内置的方法可以从UIView升到UIViewController?我知道你可以通过[self view]UIViewController到它的UIView,但我想知道是否有反向参考?

推荐答案

既然这已经是公认的答案很久了,我觉得我需要用一个更好的答案来纠正它.

以下是有关需要的一些意见:

  • 视图不需要直接访问视图控制器.
  • 相反,视图应该独立于视图控制器,并且能够在不同的上下文中工作.
  • 如果您需要视图以某种方式与视图控制器交互,推荐的方式以及Apple在Cocoa中所做的就是使用委托模式.

下面是一个如何实现它的示例:

@protocol MyViewDelegate < NSObject >

- (void)viewActionHappened;

@end

@interface MyView : UIView

@property (nonatomic, assign) MyViewDelegate delegate;

@end

@interface MyViewController < MyViewDelegate >

@end

视图与其委托交互(例如,就像UITableView一样),它并不关心它是在视图控制器中实现,还是在您最终使用的任何其他类中实现.

我最初的答案如下:I don't recommend this, neither the rest of the answers where direct access to the view controller is achieved

没有内置的方法可以做到这一点.虽然您可以通过在UIView上添加IBOutlet并在Interface Builder中连接它们来绕过它,但不建议这样做.视图不应该知道视图控制器.相反,您应该按照@Phil M的建议进行操作,并创建一个用作委托的协议.

Ios相关问答推荐

如何保持拖动预览与原始项目完全相同?

如何修复使用EFCore和SQLite的.Net MAUI iOS应用程序上的当前应用程序不支持NullabilityInfoContext?

底部导航栏在iOS上浮动

Xcode -Google Mobile Ads SDK在没有AppMeasurement的情况下初始化

如何使用 SwiftData 从列表中删除子项目?

如何在集合视图中创建装饰视图?

创建方案时运行 pod install 时出错

SwiftUI 图表 BarMark 将注释对齐到图表顶部

使用 AVCaptureDeviceTypeBuiltInTripleCamera 时 Select 合适的相机进行条码扫描

在 SwiftUI 中重构提取到子视图的 GeometryReader 代码

卡在 Apple 的 SwiftUI 教程第 5 章(更新应用数据)

视图之间的 SwiftUI 过渡,没有过渡

从 NSData 或 UIImage 中查找图像类型

在 Swift 中上传带参数的图像

针对 Xcode 中的 iPad 选项

从 WKWebView 获取所有 cookie

SLComposeViewController 分享教程

无效的 iPhone 应用程序二进制文件

闭包不能隐式捕获变异的 self 参数

两个数字之间的动画UILabel文本?