Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/112.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 为什么代表/协议是Apple';谁更愿意采用这种方法来解雇现有的UIViewController?_Ios_Cocoa Touch_Uiviewcontroller - Fatal编程技术网

Ios 为什么代表/协议是Apple';谁更愿意采用这种方法来解雇现有的UIViewController?

Ios 为什么代表/协议是Apple';谁更愿意采用这种方法来解雇现有的UIViewController?,ios,cocoa-touch,uiviewcontroller,Ios,Cocoa Touch,Uiviewcontroller,当UIViewController呈现另一个视图控制器时,在iOS 5下完成时,呈现的视图控制器自行关闭的最简单方法是调用: [[self presentingViewController] dismissViewControllerAnimated:YES completion:NULL]; 另一方面,苹果公司表示: 当需要关闭显示视图控制器时,首选方法是让显示视图控制器关闭它。换句话说,只要有可能,呈现视图控制器的同一个视图控制器也应该负责解除该视图控制器。尽管有几种技术可用于通知呈现视图

当UIViewController呈现另一个视图控制器时,在iOS 5下完成时,呈现的视图控制器自行关闭的最简单方法是调用:

[[self presentingViewController] dismissViewControllerAnimated:YES completion:NULL];
另一方面,苹果公司表示:

当需要关闭显示视图控制器时,首选方法是让显示视图控制器关闭它。换句话说,只要有可能,呈现视图控制器的同一个视图控制器也应该负责解除该视图控制器。尽管有几种技术可用于通知呈现视图控制器其呈现视图控制器应被解除,但首选技术是委派

这使得这里的一些答案建议,即使只提供一个非常简单的视图控制器,也要坚持制定一个新的协议和委派。为什么这是文档的“首选技术”,而不是上面的单行?使用委托/协议技术编写的代码大量增加,其缺点是否有任何抵消的优点?显然,如果有来自呈现视图控制器的信息需要传递回呈现视图控制器委派,这是一种很好的技术。但是,信息是委派的原因,而不是简单地从屏幕上删除显示的视图控制器

[[self-presentingViewController]DismissViewControllerInitiated:YES completion:NULL]

这可能是最简单的,但通常不是很有用

模态视图通常需要向调用者返回一些信息;这就是为什么它们是模态的。在更传统的SDK模式窗口中,模式窗口会阻止其调用者,直到模式窗口关闭为止。然后,模式窗口的结果返回给调用者。例如:

int result = ShowModalDialog("Do you want to continue?");
if (result == kYes) 
{
    doSomething();
}
else
{
    return;
}
在UIKit中,
-presentModalViewController:
不会阻塞,因此您需要一些其他机制让模态视图控制器将信息返回到呈现视图控制器。通常,这是通过委托完成的,不过还有其他方法(例如让呈现控制器处理左侧和右侧的UINavigationBar按钮)

如果模态视图控制器需要向其呈现视图控制器返回一个值,那么这是通过委托完成的,在这种情况下,呈现控制器在收到结果后关闭模态控制器是有意义的。这是最初的模式

[[self-presentingViewController]DismissViewControllerInitiated:YES completion:NULL]

这可能是最简单的,但通常不是很有用

模态视图通常需要向调用者返回一些信息;这就是为什么它们是模态的。在更传统的SDK模式窗口中,模式窗口会阻止其调用者,直到模式窗口关闭为止。然后,模式窗口的结果返回给调用者。例如:

int result = ShowModalDialog("Do you want to continue?");
if (result == kYes) 
{
    doSomething();
}
else
{
    return;
}
在UIKit中,
-presentModalViewController:
不会阻塞,因此您需要一些其他机制让模态视图控制器将信息返回到呈现视图控制器。通常,这是通过委托完成的,不过还有其他方法(例如让呈现控制器处理左侧和右侧的UINavigationBar按钮)


如果模态视图控制器需要向其呈现视图控制器返回一个值,那么这是通过委托完成的,在这种情况下,呈现控制器在收到结果后关闭模态控制器是有意义的。这是最初的模式。

同样的行为可以通过
[self dismissModalViewControllerAnimated:YES completion:nil]
(在iOS 5之前
[self dismissModalViewControllerAnimated:YES]
)实现,因为一次最多只能显示一个视图控制器


然而,委托模式的要点是,单个视图控制器可以以不同的方式呈现,例如以模式呈现或通过推送到导航堆栈呈现。该视图控制器不知道它是如何呈现的(好吧,它可以找到它,但它不应该在意)。它应该做的唯一一件事是通知它的家长,即代理,它的工作已经完成。然后,代理决定如何删除视图控制器(从导航堆栈中删除模式或pop等),或者由于其工作结果不足,子对象应该留下。因此,主要的想法是视图控制器的可重用性。

相同的行为可以通过
[自解除ViewControllerInitiated:YES completion:nil]
(在iOS 5之前
[自解除ModalViewControllerInitiated:YES]
)来实现,因为每次最多只能显示一个视图控制器

然而,委托模式的要点是,单个视图控制器可以以不同的方式呈现,例如以模式呈现或通过推送到导航堆栈呈现。该视图控制器不知道它是如何呈现的(好吧,它可以找到它,但它不应该在意)。它应该做的唯一一件事是通知它的家长,即代理,它的工作已经完成。然后,代理决定如何删除视图控制器(从导航堆栈中删除模式或pop等),或者由于其工作结果不足,子对象应该留下。因此,主要思想是视图控制器的可重用性