iOS:通过委托更改UIButton标题

时间:2013-05-02 23:54:18

标签: ios uibutton delegation

我正在使用委托更改UIButton的标题。

.h MainView

//MainViewController.h
#import <UIKit/UIKit.h>

@class SignUpDelegate;
@protocol SignUpDelegate <NSObject>
@required
-(void)loggedIn;
@end

@interface MainViewController : UITableViewController <NSFetchedResultsControllerDelegate>
{
     id <SignUpDelegate> delegate;
}
@property (nonatomic, assign) id <SignUpDelegate> delegate;
-(void)loggedIn;

@end

的.m

@interface MainViewController ()
//This button is connected to the UINavigationBar Button that needs its title changed.
//Via Interface Builder, the default value of the title is setup as "Login"
-@property (weak, nonatomic) IBOutlet UIBarButtonItem *logInOutButton;
@end    

-(void)loggedIn
{
    NSLog (@"This is Logged in inside MainView.m");
    self.logInOutButton.title = @"Logout";
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    UIViewController *destinationViewController = segue.destinationViewController;
    Signup *signUp = [destinationViewController isKindOfClass:[Signup class]] ? (Signup*)destinationViewController : nil;
    signUp.mainViewController = self.delegate;
}

.h SignUp

#import <UIKit/UIKit.h>
#import "MainViewController.h"
@interface SignUp : UIViewController <UITextFieldDelegate, UIActionSheetDelegate, SignUpDelegate>
@property (strong, nonatomic) MainViewController *mainViewController;
@end

的.m

@synthesize mainViewController;
- (IBAction)createUser:(id)sender
{
   [self loggedIn];
}

- (void) loggedIn
{
    NSLog (@"This is Logged in inside SignUp");
    [mainViewController loggedIn];
}

所以,两个NSLogs打印都很好,我认为这意味着委托正在工作,但是,导航栏上UIButton的标题永远不会改为“Logout”

1 个答案:

答案 0 :(得分:1)

那是因为您每次都在STMasterViewController委托方法中重新创建MainViewController(这应该是loggedIn吗?)。 (您可以通过在-[MainViewController loggedIn]上添加断点并检查self.logInOutButton是否为非零来验证这一点。相反,您应该获得对MainViewController的现有实例的引用并对其进行操作。