首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Objective C- UIAlertViewDelegate无法访问其他类中的UILabel

Objective C- UIAlertViewDelegate无法访问其他类中的UILabel
EN

Stack Overflow用户
提问于 2012-11-19 01:21:40
回答 2查看 226关注 0票数 2

我刚接触目标C,我有一个问题,我知道这一定是一个非常简单的问题--我想我可能以错误的方式来处理它。

我已经创建了一个UIAlertViewDelegate类,我希望它成为View Controller类中的一些UIAlertViews的委托。

当用户按下按钮并输入一些文本时,我希望使用该文本更新我的ViewController类中的标签。但是,我显然不能从我的UIAlertViewDelegate类中引用标签"outputLabel“,除非我以某种方式传递它。

我得到的错误是“使用未声明的标识符'outputLabel‘”。

ViewController.h

代码语言:javascript
复制
@interface ViewController : UIViewController <UIAlertViewDelegate>;
...
@property (strong) UIAlertViewDelegate *AVDelegate;

ViewController.m

代码语言:javascript
复制
- (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

代码语言:javascript
复制
#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

代码语言:javascript
复制
@interface UIAlertViewDelegate : UIViewController <UIAlertViewDelegate,UIActionSheetDelegate>;

我在很多年前就做过一些Java方面的工作。我想我必须以某种方式传递我的UIAlertViewDelegate类的视图,但我不确定的语法,将非常感谢指针在正确的方向…

詹姆斯

EN

回答 2

Stack Overflow用户

发布于 2012-11-19 01:35:11

这里有许多你不应该做的事情,但是,从影响你的问题的主要事情开始……

您不应该发明自己的UIAlertViewDelegate类,这意味着不要这样做……

代码语言:javascript
复制
@interface UIAlertViewDelegate : UIViewController <UIAlertViewDelegate,UIActionSheetDelegate>;

因为UIAlertViewDelegate是一种协议,所以您也不能将alloc与它一起使用。

正确的的主要内容是...

代码语言:javascript
复制
@interface ViewController : UIViewController <UIAlertViewDelegate>

也就是说,您的ViewController能够充当UIAlertViewDelegate,因此用于创建警报的代码可以使用delegate:self,而不是尝试创建单独的委托属性或对象。

您可能仍然会有问题,但这些更改应该会让它变得更清晰一些。

票数 1
EN

Stack Overflow用户

发布于 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对象访问文本字段来设置其中一个回调中的标签。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13442536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档