我刚接触目标C,我有一个问题,我知道这一定是一个非常简单的问题--我想我可能以错误的方式来处理它。
我已经创建了一个UIAlertViewDelegate类,我希望它成为View Controller类中的一些UIAlertViews的委托。
当用户按下按钮并输入一些文本时,我希望使用该文本更新我的ViewController类中的标签。但是,我显然不能从我的UIAlertViewDelegate类中引用标签"outputLabel“,除非我以某种方式传递它。
我得到的错误是“使用未声明的标识符'outputLabel‘”。
ViewController.h
@interface ViewController : UIViewController <UIAlertViewDelegate>;
...
@property (strong) UIAlertViewDelegate *AVDelegate;ViewController.m
- (void)viewDidLoad
{
UIAlertViewDelegate *AVDelegate;
AVDelegate = [[UIAlertViewDelegate alloc] init];
[super viewDidLoad];
}
- (IBAction)doAlertInput:(id)sender {
UIAlertViewDelegate *AVDelegate;
AVDelegate = [[UIAlertViewDelegate alloc] init];
UIAlertView *alertDialogue;
alertDialogue = [[UIAlertView alloc]
initWithTitle:@"Email Address"
message:@"Please Enter Your Email Address:"
delegate:self.AVDelegate
cancelButtonTitle:@"OK"
otherButtonTitles:nil, nil];
alertDialogue.alertViewStyle=UIAlertViewStylePlainTextInput;
[alertDialogue show];
}UIAlertViewDelegate.m
#import "UIAlertViewDelegate.h"
@implementation UIAlertViewDelegate
- (void)alertView:(UIAlertView *)alertView
clickedButtonAtIndex:(NSInteger)buttonIndex
{
NSString *buttonTitle = [alertView buttonTitleAtIndex:buttonIndex];
NSString *alertTitle = [alertView title];
if ([alertTitle isEqualToString:@"Alert Button Selected"] || [alertTitle isEqualToString:@"Alert Button Selected"]) {
if ([buttonTitle isEqualToString:@"Maybe Later"])
{
outputLabel.text=@"User Clicked: 'Maybe Later'";UIAlertViewDelegate.h
@interface UIAlertViewDelegate : UIViewController <UIAlertViewDelegate,UIActionSheetDelegate>;我在很多年前就做过一些Java方面的工作。我想我必须以某种方式传递我的UIAlertViewDelegate类的视图,但我不确定的语法,将非常感谢指针在正确的方向…
詹姆斯
发布于 2012-11-19 01:35:11
这里有许多你不应该做的事情,但是,从影响你的问题的主要事情开始……
您不应该发明自己的UIAlertViewDelegate类,这意味着不要这样做……
@interface UIAlertViewDelegate : UIViewController <UIAlertViewDelegate,UIActionSheetDelegate>;因为UIAlertViewDelegate是一种协议,所以您也不能将alloc与它一起使用。
正确的的主要内容是...
@interface ViewController : UIViewController <UIAlertViewDelegate>也就是说,您的ViewController能够充当UIAlertViewDelegate,因此用于创建警报的代码可以使用delegate:self,而不是尝试创建单独的委托属性或对象。
您可能仍然会有问题,但这些更改应该会让它变得更清晰一些。
发布于 2012-11-19 04:54:58
您的视图控制器是警报视图的委托,因此,您不需要创建委托对象。
使用self (视图控制器)作为委托参数初始化警报视图。
然后在视图控制器中实现委托方法(用于警报视图)。
http://developer.apple.com/library/ios/#documentation/uikit/reference/UIAlertViewDelegate_Protocol/UIAlertViewDelegate/UIAlertViewDelegate.html
委托的要点是使对象可以在任何类上有回调。
我建议仔细阅读协议和委派。
http://developer.apple.com/library/ios/#documentation/General/Conceptual/DevPedia-CocoaCore/Delegation.html#//apple_ref/doc/uid/TP40008195-CH14-SW1
我猜您正在尝试使用警报视图输入文本,因此您应该将警报视图样式设置为UIAlertViewPlainTextStyle,并通过从alertView对象访问文本字段来设置其中一个回调中的标签。
https://stackoverflow.com/questions/13442536
复制相似问题