ios - 在不同的屏幕重用xib
问题描述
我有 4 个屏幕,它们的视图几乎相同:
一个屏幕具有相同的视图,但 UI 略有不同:
所以,我的问题是:我可以使用一个 xib 并调整状态(活动、非活动)并为不同的屏幕更改 ui 吗?我该怎么做?
解决方案
这是此类的一个示例
如果您使用的是 Objective-c,请在您的自定义 XIB 类的 .m 文件中。
- (void)foo:(NSString*)labelText andButtonText:(NSString*)buttonTitle {
//Do your code here for some screen like change labels and button text
}
- (void)bar:(NSString*)labelText andButtonText:(NSString*)buttonTitle {
//Do your code here for some another screen and change labels and button text
}
如果您使用的是 Objective-c,请在您的自定义 XIB 类的 .h 文件中。
- (void)foo:(NSString*)labelText andButtonText:(NSString*)buttonTitle;
- (void)bar:(NSString*)labelText andButtonText:(NSString*)buttonTitle;
在要显示自定义 UI 的视图控制器中
创建您的 xib 实例或通过 interfacebuilder 添加并在您的自定义类实例上根据需要调用该方法。
下面是我在我的一个项目中使用的一门课程,以获得清晰的理解。
#import <UIKit/UIKit.h>
#import "DYRateView.h"
@interface LevelAndRankDetails : UIView
@property (nonatomic, strong) IBOutlet UIView* contentView;
@property (nonatomic, strong) IBOutlet UIView* viewContainer;
@property (nonatomic, strong) IBOutlet UILabel* lblLevel;
@property (nonatomic, strong) IBOutlet UILabel* lblRanking;
@property (weak, nonatomic) IBOutlet DYRateView *viewRate;
- (void)setLevel:(NSNumber*)level andRanking:(NSNumber*)ranking;
- (void)setupUI;
@end
.m 文件
#import "LevelAndRankDetails.h"
#import "AppDelegate.h"
#import "Constants.h"
@implementation LevelAndRankDetails
/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect {
// Drawing code
}
*/
- (id)initWithFrame:(CGRect)frame {
if (self = [super initWithFrame:frame]){
[self commonSetup];
}
return self;
}
-(id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self)
{
[self commonSetup];
}
return self;
}
- (void)layoutSubviews {
[super layoutSubviews];
}
- (void)viewFromNibForClass {
[[NSBundle mainBundle] loadNibNamed:[[self class] description] owner:self options:nil];
[self addSubview:self.contentView];
self.contentView.frame = self.bounds;
}
- (void)commonSetup {
[self viewFromNibForClass];
//For View's Corner Radius
self.contentView.layer.cornerRadius = 12;
self.contentView.layer.masksToBounds = YES;
self.contentView.backgroundColor = kDefaultBackgroundGreyColor;
self.viewContainer.backgroundColor = kDefaultBackgroundGreyColor;//[UIColor clearColor];
self.backgroundColor = kDefaultBackgroundGreyColor;
//self.viewContainer.backgroundColor = UIColorFromRGB(0xBB9657);//[kLearnFromLightColor colorWithAlphaComponent:0.5];
self.viewRate.rate = 0;
self.viewRate.editable = NO;
self.viewRate.delegate = nil;
self.viewRate.alignment = RateViewAlignmentCenter;
self.viewRate.backgroundColor = [UIColor clearColor];
[self.viewRate setEmptyStarImage:[UIImage imageNamed:@"StarEmpty"]];
UIImage* imageFullStar = [[UIImage imageNamed:@"StarFull"] imageTintedWithColor:kSliderDarkYellowColor];
[self.viewRate setFullStarImage:imageFullStar];
self.lblLevel.textColor = [UIColor whiteColor];
self.lblRanking.textColor = [UIColor whiteColor];
//For Teacher label
}
- (void)setupUI {
self.contentView.layer.cornerRadius = 0;
self.contentView.layer.masksToBounds = YES;
self.contentView.backgroundColor = [UIColor clearColor];
self.viewContainer.backgroundColor = [UIColor clearColor];//[UIColor clearColor];
self.backgroundColor = [UIColor clearColor];
}
- (void)setRanking:(CGFloat)ranking {
self.viewRate.rate = ranking;
}
- (void)setLevel:(NSNumber*)level {
self.lblLevel.text = [NSString stringWithFormat:@"Level : %@",level];
}
- (void)setLevel:(NSNumber*)level andRanking:(NSNumber*)ranking {
if (level.integerValue > 0) {
[self setLevel:level];
}
if (ranking.doubleValue > 0) {
CGFloat rankingConverted = ranking.floatValue;
[self setRanking:rankingConverted];
}
}
@end
这就是您在视图控制器中使用它的方式
LevelAndRankDetails* toolTipCustomView = [[LevelAndRankDetails alloc] initWithFrame:CGRectMake(0, 0, 250, 66)];
toolTipCustomView.backgroundColor = [UIColor blackColor];
[toolTipCustomView setLevel:@(10) andRanking:@(3)];
推荐阅读
- php - PHP mb_ereg_replace 不替换 UTF-8 字符
- spring-cloud - 用于 SSL 的 Spring Cloud Stream Binder Solace 配置
- python - 如果是奇数则返回数字的平方,如果是偶数则返回 (number-1) 平方
- asp.net-core - 在运行时应用迁移有什么缺点?
- mongodb - MongoDB查询优化或提高性能
- julia - 错误:MethodError:没有方法匹配 abs(::Array{Complex{Float64},1})
- json - Delphi 7:处理从网站读取的 JSON 响应中的 utf-8 数据
- r - 在shinyapps.io 上部署闪亮的应用程序时出错
- angularjs-directive - 如果绑定数据为空,想在 md-option 中显示自定义文本
- c - 使用单指针代替双指针