我是Objective 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类视图但我不确定语法,会非常欣赏正确方向的指针......
詹姆斯
答案 0 :(得分:1)
这里有很多你不应该做的事情,但是从影响你问题的主要事情开始....
你不应该发明自己的UIAlertViewDelegate
类,这意味着不要这样做......
@interface UIAlertViewDelegate : UIViewController <UIAlertViewDelegate,UIActionSheetDelegate>;
由于UIAlertViewDelegate
是一种协议,因此您也无法使用alloc
。
正确的主要内容是......
@interface ViewController : UIViewController <UIAlertViewDelegate>
这表示您的ViewController
可以充当UIAlertViewDelegate
,因此您创建警报的代码可以使用delegate:self
,而不是尝试创建单独的委托属性或对象。
您可能仍然有疑问,但这些更改应该清理一下。
答案 1 :(得分:0)
您的视图控制器是警报视图的委托,因此,您无需创建委托对象。
使用self(视图控制器)作为委托参数初始化警报视图。
然后在视图控制器中实现委托方法(用于警报视图)。
委托的目的是使一个对象可以在任何类上进行回调。
我建议阅读协议和授权。
我猜您正在尝试使用警报视图来输入文本,因此您需要将警报视图样式设置为UIAlertViewPlainTextStyle,并通过访问alertView对象中的文本字段在其中一个回调中设置标签。 / p>