首页 > 解决方案 > 在不同的屏幕重用xib

问题描述

我有 4 个屏幕,它们的视图几乎相同:

视图处于非活动状态

视图具有活动状态

一个屏幕具有相同的视图,但 UI 略有不同:

在此处输入图像描述

所以,我的问题是:我可以使用一个 xib 并调整状态(活动、非活动)并为不同的屏幕更改 ui 吗?我该怎么做?

标签: iosswiftxib

解决方案


这是此类的一个示例

如果您使用的是 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)];

推荐阅读