我现在遇到了几个案例,它们可以方便地找到"最顶层"的视图控制器(负责当前视图的控制器),但还没有找到办法.
基本上挑战是这样的:假设一个人在一个不是视图控制器(或视图)的类中执行[并且没有活动视图的地址]并且还没有传递最顶层视图控制器的地址(或者说,导航控制器的地址),是否可以找到该视图控制器?(如果是这样,怎么样?)
或者,如果失败了,是否有可能找到最顶层的视图?
我有一个指针UIView.我如何访问它UIViewController? [self superview]是另一个UIView,但不是UIViewController,对吧?
当我想访问UIView当前的父级时,UIView我UIView在当前声明父级UIView的父UIView对象,并通过将父对象分配给当前视图的对象属性来访问它.
有没有办法摆脱这种情况并直接调用父视图的方法或属性?
我也试过(parentView *) self.view.superview但没有帮助.
调用此对象的函数时会出错
[UIVIew unrecognized selector......
Run Code Online (Sandbox Code Playgroud) 我有一个UIViewController和一个UIView.当我尝试在UIView中添加警报时,我必须使用控制器来呈现UIAlertController.如何将UIViewController的引用传递给UIView类?或者,我如何创建控制器的委托?
class GameViewController: UIViewController {
@IBOutlet var gameBoardUIView: GameBoardUIView
...
}
class GameBoardUIView: UIView {
...
func move() {
if !gameBoard.checkNextMoveExist() {
var alert = UIAlertController(title: "Game Over", message: nil, preferredStyle: UIAlertControllerStyle.Alert)
alert.addAction(UIAlertAction(title: "Ok", style: UIAlertActionStyle.Cancel, handler: {(action: UIAlertAction!) in
println("Game Over")
}))
}))
// Following would fail because self is not a UIViewController here
// self.presentViewController(alert, animated: true, completion: nil)
}
}
}
Run Code Online (Sandbox Code Playgroud) 有一种方法可以从UIView对象获取视图控制器引用吗?我需要这样的东西:
MyParentViewController *myParentViewController = [self.view.superview controller];
Run Code Online (Sandbox Code Playgroud) 我这样做是为了得到这个观点:
[self.superview viewWithTag:10]
Run Code Online (Sandbox Code Playgroud)
但是我怎样才能获得该视图的viewcontroller.就像你可以获得viewcontroller的视图一样,我想转向其他方式,这样我就可以向该viewcontroller发送消息(调用方法).例如:
[[self.superview viewWithTag:10].viewController doSomething];
Run Code Online (Sandbox Code Playgroud)
(显然这不是实际的代码,但我想要这样的东西)
一些答案说从UIView到UIViewController?是一个糟糕的设计实践.
但是,LevelView从Apple自己的BubbleLevel Xcode示例项目中,它有一个assign属性viewController.
我认为做的最好的事情就是定义一个协议及分配视图控制器作为视图的代表,就像你要做一个做UITableView或UITextField或UITextView.
但是,我可能是错的,所以我的问题是视图与视图控制器通信的推荐方法是什么?
model-view-controller delegates uiviewcontroller uikit uiview
我的ViewController中有一堆子视图.
在最后一层我有一个UIView,从这个视图我想调用superview,直到我找到属于我的ViewController的UIView.
是否有可能找出UIView是否属于ViewController?
UIView *someView = self.superView;
while (true)
{
if (someView BELONGS TO VIEWCONTROLLER)
{
// Now we know this view belongs to a VIewController
break;
}
someView = someView.superView;
}
Run Code Online (Sandbox Code Playgroud) 我有一个UIViewController包含它UIView的UIButton.我想UIViewController在按钮点击事件中触发一个方法.
保持参考UIViewController似乎不是一个好主意,如下面的链接说:
从UIView获取UIViewController?
所以我想使用委托来实现这个目标.有关如何实现这一点的任何提示?
因此,我正在AppleTV上的SpriteKit游戏中进行应用内购买,但如果付款错误或任何其他各种错误,我想显示错误.UIAlertView就是我在iOS上做的,但这不是tvOS上的一个选项.有类似的东西可以做吗?基本上,我需要弹出描述错误的东西和一个关闭弹出窗口的按钮.添加更多按钮(如UIAlertView)的能力将是锦上添花.
注意:我对此进行了一些研究,大多数事情似乎都指向使用TVML,但是,我不相信这是与SpriteKit混合使用的选项.如果它解释了如何导入TVML(我几乎一无所知)并将其与SpriteKit一起运行,我将接受与此相关的答案.我假设我正在寻找与TVML无关的答案.
假设我们有一个自定义控件,在某些状态下应弹出选项列表供用户选择(UIAlertController).通常当我们在视图控制器中时,我们使用presentViewController方法,但在这种情况下,我们无法访问保存此方法的父UIViewController.虽然似乎有一些方法可以从子视图中获取UIViewController,但它被认为是针对MVC设计模式的.那你怎么这样做?我想保持视图控制器尽可能精简,自定义视图(uicontrol)自给自足,所以我不想将此逻辑移动到视图控制器.虽然欢迎并赞赏您的所有建议和建议.
uiviewcontroller ios presentviewcontroller swift uialertcontroller