我发现最吸引人的方法是在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所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)