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.
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:
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
Sie benötigen Injektion von UILabel in der UIView Klasse zu erstellen, in Ihrem Fall in "Mini" Klasse. –