我希望这是非常直接的。正如你将看到我的代码,我只是试图得到一个UIAlertView按钮按下弹出我回到根视图。
我没有得到任何编译错误或警告,当我运行应用程序时,"RedeemCoupon"方法在IBAction中被调用,并且UIAlertView应该弹出,但它似乎没有"doneRedeeming"方法被调用-我没有看到任何来自NSLog(是的,我知道我正在设置buttonIndex为0 -一旦我得到这个工作我会修复它)。所以,基本上它不起作用。我点击"取消"按钮,警报就消失了。
顺便说一下,我不确定这是否重要,但这个"RedeemCouponViewController"视图是堆栈上的第4号,它是通过使用presentModalViewController在前一个视图中添加的。
如果需要的话,我愿意接受其他的方法——欢迎所有的建议!提前感谢!
// RedeemCouponViewController.h
@interface RedeemCouponViewController : UIViewController <UIAlertViewDelegate> {
// RedeemCouponViewController.m
- (IBAction) redeemYes: (UIButton*) sender {
CouponRedeem *redeem = [[CouponDatabase database] couponRedeem:_uniqueId];
[redeem release];
UIAlertView *doneRedeeming = [[UIAlertView alloc]initWithTitle:@"Coupon Redeemed!"
message:@"Thanks for shopping!"
delegate:self
cancelButtonTitle:@"Back to Main Menu"
otherButtonTitles:nil];
[doneRedeeming show];
[doneRedeeming release];
}
-(void) doneRedeeming: (UIAlertView *) doneRedeeming clickedButtonAtIndex: (NSInteger)buttonIndex {
if (buttonIndex = 0) {
NSLog(@"doneRedeemed method called");
[self.navigationController popToRootViewControllerAnimated:YES];
} else {
//do nothing
}
}
if (buttonIndex == 0) {
代替
if (buttonIndex = 0) {
前者检查是否相等,后者赋值。
同样,你想要
– alertView:clickedButtonAtIndex:
- doneRedeeming:clickedButtonAtIndex:
您需要使用UIAlertViewDelegate
方法:
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {}
不-(void) doneRedeeming: (UIAlertView *) doneRedeeming clickedButtonAtIndex: (NSInteger)buttonIndex {}
使用委托方法-alertView:didDismissWithButtonIndex:
侦听您的取消按钮索引
@PengOne的答案是正确的:你的问题是:
if (buttonIndex = 0) {
你说
我知道这是不对的,但我只是我想确认一下这份声明
但buttonIndex = 0
求0
,等于
if (0)
无论buttonIndex的值如何,该块中的代码都将永远不会执行。如果你真的想无条件地执行,把If改成if( 1 )
,或者直接把If去掉。
如果您在调试器中运行这段代码,这将是微不足道的。你可能认为你知道你的代码在做什么,但是如果你不观察它的运行,你就什么都不知道了。