2011-11-22 109 views
0

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

- (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];  
} 

我需要另一个按钮,点击可显示用户名和具有assing该按钮的标题用户名的代码,这是

- (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];用户名;

+0

好友...你如何创建按钮。粘贴代码.. –

+0

你的方法不行吗?怎么了?您是否尝试为托管视图调用'setNeedsDisplay'? – dasdom

+0

[NSString stringWithString:username];用户名应该是NSString类的对象。 – iamsult

回答

0

总之你在方法

- (void)getFacebookProfileFinished:(ASIHTTPRequest *)request 

做Facebook的请求后,设置按钮标题。那么,为什么你需要在refresh方法中再次设置?只需在条件中注释掉refresh的方法。

//[_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; 
    } 
} 
+0

对不起,我不明白你说什么。谢谢 – ICoder

+0

我设置它,但没有显示在按钮 – ICoder

+0

如果(firstName &&姓氏){ username = [NSString stringWithFormat:@“%@%@”,firstName,lastName]; } else { username = @“mysterious user”; } [_loginButton setTitle:username forState:UIControlStateNormal]; _lblfaceusername.text = username; – ICoder

0

你需要的是存储在该代码段都可以访问的位置的参考,该消息是什么。这样做的典型方法是在接口定义中添加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 

这使您可以在任何需要的位置访问您的变量。