UINavigationController和UINavigationBarDelegate.ShouldPopItem()与MonoTouch

UINavigationController和UINavigationBarDelegate.ShouldPopItem()与MonoTouch,第1张

概述当UINavigationBar(由UINavigationController控制)的后退按钮被点击时,如何d出UIAlertView?在某些情况下,我想问用户“你确定吗?问题的类型,所以他可以中止动作并保持当前视图或d出导航堆栈,并转到父视图. 我发现最吸引人的方法是在UINavigationBar的代理上覆盖ShouldPopItem(). 现在,这里有一个很相似的问题:iphone nav 当UINavigationbar(由UINavigationController控制)的后退按钮被点击时,如何d出UIAlertVIEw?在某些情况下,我想问用户“你确定吗?问题的类型,所以他可以中止动作并保持当前视图或d出导航堆栈,并转到父视图.

我发现最吸引人的方法是在UINavigationbar的代理上覆盖ShouldPopItem().

现在,这里有一个很相似的问题:iphone navigationController : wait for uialertview response before to quit the current view

还有一些类似性质的其他问题,例如:
Checking if a UIViewController is about to get Popped from a navigation stack?
和How to tell when back button is pressed in a UINavigationControllerStack

所有这些状态“子类UINavigationController”作为可能的答案.

那就是这样一个读类似子类的UINavigationController一般不是一个好主意:
Monotouch: UINavigationController,override initWithRootViewController

apple docs还说UINavigationController不是要进行子类化的.

另外还有一些人声称,在使用UINavigationController时,不重要的ShouldPopItem()是不可能的,因为它不允许将一个自定义/子类的UINavigationbarDelegate分配给UINavigationbar.

我的子类化尝试没有工作,我的自定义代表不被接受.

我也读过某个地方可能会在我的自定义UINavigationController中实现ShouldPopItem(),因为它将自己指定为它的UINavigationbar的Delegate.

没什么惊喜,这没有办法. UINavigationController的子类如何知道属于UINavigationbarDelegate的方法.它被拒绝:“找不到适当的方法来覆盖”.删除“覆盖”关键字已编译,但该方法被完全忽略(如预期).我认为,使用Obj-C可以实现几个协议(类似于C#AFAIK中的接口)来实现.不幸的是,UINavigationbarDelegate不是一个接口,而是Monotouch中的一个类,所以这似乎是不可能的.

我几乎在这里迷路了当UINavigationbar的代理由UINavigationController控制时,如何覆盖ShouldPopItem()?还有其他方法可以d出一个UIAlertVIEw并等待它的结果可能会d出导航堆栈?

解决方法 这个帖子有点旧,但是如果你仍然对解决方案感兴趣(仍然涉及到子类化):

这实现了“你确定要退出吗?当按下后退按钮时发出警报,请从代码修改:http://www.hanspinckaers.com/custom-action-on-back-button-uinavigationcontroller/

原来,如果您在CustomNavigationController中实现UINavigationbarDelegate,可以使用shouldPopItem方法:

CustomNavigationController.h:

#import <Foundation/Foundation.h>@interface CustomNavigationController : UINavigationController <UIAlertVIEwDelegate,UINavigationbarDelegate> {BOol alertVIEwClicked;BOol regularPop;}@end

CustomNavigationController.m:

#import "CustomNavigationController.h"#import "SettingstableController.h"@implementation CustomNavigationController- (BOol)navigationbar:(UINavigationbar *)navigationbar shouldPopItem:(UINavigationItem *)item {if (regularPop) {    regularPop = FALSE;    return YES;}if (alertVIEwClicked) {    alertVIEwClicked = FALSE;    return YES;}if ([self.topVIEwController isMemberOfClass:[SettingstableVIEwController class]]) {    UIAlertVIEw * exitAlert = [[[UIAlertVIEw alloc] initWithTitle:@"Are you sure you want to quit?" message:nil delegate:self cancelbuttonTitle:@"Cancel" otherbuttonTitles:@"Yes",nil] autorelease];    [exitAlert show];    return NO;}   else {    regularPop = TRUE;    [self popVIEwControllerAnimated:YES];    return NO;}   }-(voID)alertVIEw:(UIAlertVIEw *)alertVIEw clickedbuttonAtIndex:(NSInteger)buttonIndex {if (buttonIndex == 0) {    //Cancel button}else if (buttonIndex == 1) {            //Yes button    alertVIEwClicked = TRUE;    [self popVIEwControllerAnimated:YES];}           }@end

“regularPop”bool的奇怪的逻辑是因为某些原因只是在shouldPopItem上返回“YES”只会d出导航栏,而不是与navbar关联的视图 – 为此,您必须直接调用popVIEwControllerAnimated(然后调用shouldPopItem为其逻辑的一部分)

总结

以上是内存溢出为你收集整理的UINavigationController和UINavigationBarDelegate.ShouldPopItem()与MonoTouch全部内容,希望文章能够帮你解决UINavigationController和UINavigationBarDelegate.ShouldPopItem()与MonoTouch所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1097435.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存