【问题标题】:How to set title for UIButton?如何设置 UIButton 的标题?
【发布时间】:2011-11-22 12:43:09
【问题描述】:

我们如何为按钮设置按钮标题,我知道这个答案很简单,我们需要为标题设置按钮的标题,但我的需求有些不同,我有一个根据登录动态更改的用户名.我在按钮单击中设置它并将其显示在该按钮内的标签中。我的代码是

- (void)getFacebookProfileFinished:(ASIHTTPRequest *)request
{

    // Use when fetching text data
    NSString *responseString = [request responseString];
    NSLog(@"Got Facebook Profile: %@", responseString);

    NSString *likesString;
    NSMutableDictionary *responseJSON = [responseString JSONValue];   

    NSString *username;
    NSString *firstName = [responseJSON objectForKey:@"first_name"];
    NSString *lastName = [responseJSON objectForKey:@"last_name"];
    if (firstName && lastName) {
        username = [NSString stringWithFormat:@"%@ %@", firstName, lastName];
    } else {
        username = @"mysterious user";
    }
     [_loginButton setTitle:username forState:UIControlStateNormal];
    _lblfaceusername.text = username;


    [self refresh];    
}

我需要在另一个按钮单击中显示用户名,并且必须将该按钮的标题分配给用户名,代码是

- (void)refresh {
    if (_loginState == LoginStateStartup || _loginState == LoginStateLoggedOut) {
        _loginStatusLabel.text = @"Not connected to Facebook";
        [_loginButton setTitle:@"Login" forState:UIControlStateNormal];
        _loginButton.hidden = NO;
    } else if (_loginState == LoginStateLoggingIn) {
        _loginStatusLabel.text = @"Connecting to Facebook...";
        _loginButton.hidden = YES;
    } else if (_loginState == LoginStateLoggedIn) {
        _loginStatusLabel.text = @"Connected to Facebook";
        [_loginButton setTitle:@"" forState:UIControlStateNormal];
        _loginButton.hidden = NO;
    }   
}

我需要在[_loginButton setTitle:@"" forState:UIControlStateNormal];中设置用户名我想要[_loginButton setTitle:username forState:UIControlStateNormal];

【问题讨论】:

  • 好友... 你是如何创建按钮的。粘贴代码..
  • 你的方法不起作用吗?发生什么了?您是否尝试调用 setNeedsDisplay 以获得托管视图?
  • [NSString stringWithString:username];用户名应该是 NSString 类的对象。
  • ???我不确定,如果那是你想要的,但你为什么不把refresh 变成referesh4User:(NSString *)username
  • @dasdom 先生,我需要为 _loginbutton 设置标题用户名

标签: iphone


【解决方案1】:

无论如何你已经在方法中设置了按钮标题

- (void)getFacebookProfileFinished:(ASIHTTPRequest *)request

Facebook 请求完成后。那么,为什么需要在refresh 方法中再次设置呢?只需在refresh 方法中将LoginStateLoggedIn 条件中的行注释掉即可。

//[_loginButton setTitle:@"" forState:UIControlStateNormal];

编辑

- (void)refresh {
    if (_loginState == LoginStateStartup || _loginState == LoginStateLoggedOut) {
        _loginStatusLabel.text = @"Not connected to Facebook";
        [_loginButton setTitle:@"Login" forState:UIControlStateNormal];
        _loginButton.hidden = NO;
    } else if (_loginState == LoginStateLoggingIn) {
        _loginStatusLabel.text = @"Connecting to Facebook...";
        _loginButton.hidden = YES;
    } else if (_loginState == LoginStateLoggedIn) {
        _loginStatusLabel.text = @"Connected to Facebook";
        NSString *username = [_loginButton titleForState:UIControlStateNormal];
        [_loginButton setTitle:username forState:UIControlStateNormal];
        _loginButton.hidden = NO;
    }   
}

【讨论】:

  • 我设置了但按钮没有显示
  • if (firstName && lastName) { username = [NSString stringWithFormat:@"%@ %@", firstName, lastName]; } else { 用户名 = @"神秘用户"; } [_loginButton setTitle:username forState:UIControlStateNormal]; _lblfaceusername.text = 用户名;
  • @Aadhirs 我把你说的都说出来了,我在上面的行之后得到了按钮的标题,非常感谢
【解决方案2】:

您需要将对该消息的引用存储在两个代码都可以访问的位置。这样做的典型方法是在你的接口定义中添加一个 NSString * _username,并在你收到它时将它设置为用户名。这样您就可以随时从任何位置访问它,这取决于它的当前值。

包括内存管理,这将产生:

[_username release]; // Release possible previous login
_username = [username retain]; // Ownership needed

刷新中:

[_loginButton setTitle:_username forState:UIControlStateNormal];

在dealloc中:

[_username release]; // Release ownership when not needed anymore

这允许您在所需的任何位置访问您的变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-30
    • 2015-09-14
    • 2012-07-21
    • 2011-02-15
    • 1970-01-01
    • 1970-01-01
    • 2013-03-06
    • 1970-01-01
    相关资源
    最近更新 更多