2017-08-03 3 views
0

Ich habe Xib UIView, die von meinem ViewController angezeigt wird. Das Xib enthält ein UILabel und ein UIButton. Meine Schaltfläche ist über meinen gesamten XIB verteilt, und ich benutze ihn, um mit meinem SecondViewController zu navigieren, und das erreiche ich mit Delegate-Methoden.So ändern Sie Xibs Label von UIViewController

Hier ist die Sache mit meinem Label; weil meine taste transparent ist, kann ich sie unter der taste anzeigen. Was ich nicht tun kann, ist Mylabels Text von ViewController zu ändern.

habe ich einige der Suche und stoßen auf einen Vorschlag wie folgt aus:

ist eine andere .nib-Datei für die subview erstellen und die Subview in dort setzen. Erstellen Sie dann in dieser .nib-Datei den Dateibesitzer IOSubview. Eigenschaft Verbindungen funktionieren dort gut. Dann fügen Sie einfach die Unteransicht Ihren IOViewController programmatisch hinzu. Denken Sie daran, zuerst die Datei aus dem Bündel zu laden.

Link: https://stackoverflow.com/a/20294118/1450201

Aber es macht keinen Sinn für mich machen, weil der Grund, warum ich die xib zunächst erstellt ist, es zu benutzen mehr als einmal. Ich glaube, die Lösung dieses Problems könnte viel einfacher sein. Aber wie?? Diese

ist, was meine xib wie folgt aussieht: enter image description here

Und hier ist ein GitHub Repo-Link und mein Code:

https://github.com/TimurAykutYildirim/demoView

ViewController.h

#import <UIKit/UIKit.h> 
#import "Mini.h" 

@interface ViewController : UIViewController <SelectionProtocol> 
@property (weak, nonatomic) IBOutlet Mini *miniView; 
@property (weak, nonatomic) IBOutlet UILabel *miniLabel; 
@end 

Viewcontroller. m

#import "ViewController.h" 

@interface ViewController() 

@end 

@implementation ViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 

    self.miniView.delegate = self; 
} 


-(void) isClicked { 
    NSString * storyboardName = @"Main"; 
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:storyboardName bundle: nil]; 
    UIViewController * vc = [storyboard instantiateViewControllerWithIdentifier:@"SecondViewController"]; 
    [self presentViewController:vc animated:YES completion:nil]; 
} 

- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 


@end 

Mini.h

#import <UIKit/UIKit.h> 

@protocol SelectionProtocol; 

@interface Mini : UIView 

@property (nonatomic, weak) id<SelectionProtocol> delegate; 

- (IBAction)btnClick:(id)sender; 

@end 


@protocol SelectionProtocol <NSObject> 

@required 
-(void) isClicked; 

@end 

Mini.m

#import "Mini.h" 

@implementation Mini 

/* 
// Only override drawRect: if you perform custom drawing. 
// An empty implementation adversely affects performance during animation. 
- (void)drawRect:(CGRect)rect { 
    // Drawing code 
} 
*/ 

- (instancetype)initWithCoder:(NSCoder *)aDecoder { 
    if (self = [super initWithCoder:aDecoder]) { 
     [self load]; 
    } 

    return self; 
} 


- (instancetype)initWithFrame:(CGRect)frame { 
    if (self = [super initWithFrame:frame]) { 
     [self load]; 
    } 
    return self; 
} 

- (void)load { 
    UIView *view = [[[NSBundle bundleForClass:[self class]] loadNibNamed:@"Mini" owner:self options:nil] firstObject]; 
    [self addSubview:view]; 
    view.frame = self.bounds; 

    // ui component properties will be set here 

} 
- (IBAction)btnClick:(id)sender { 

    if ([self.delegate conformsToProtocol:@protocol(SelectionProtocol)]) { 
     [self.delegate isClicked]; 
    } 
} 

@end 
+0

Sie benötigen Injektion von UILabel in der UIView Klasse zu erstellen, in Ihrem Fall in "Mini" Klasse. –

Antwort

2

Aktualisieren Sie Ihre Mini.h Etikett Steckdose, um es hinzuzufügen.

Mini.h

#import <UIKit/UIKit.h> 

@protocol SelectionProtocol; 

@interface Mini : UIView 

@property (nonatomic, weak) id<SelectionProtocol> delegate; 

@property (weak, nonatomic) IBOutlet UILabel *miniLabel; 

- (IBAction)btnClick:(id)sender; 
@end 


@protocol SelectionProtocol <NSObject> 

@required 
-(void) isClicked; 

@end 

und in Viewcontroller

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 

    self.miniView.delegate = self; 
    self.miniView.miniLabel.text = //set whatever value 
} 
+0

danke! Ich werde es als Antwort markieren, sobald 5 min. Regel entspricht dies –

Verwandte Themen