如何在Xcode中重用原型单元的布局?

时间:2016-06-16 11:00:21

标签: ios xcode swift

我有两个TableViewControllers,两个原型单元的布局是相同的。是否可以提取布局以便我不需要维护多个副本?

enter image description here

2 个答案:

答案 0 :(得分:4)

您可以将这些原型单元移动到xib文件中,并在每个tableview上注册UINib。

答案 1 :(得分:1)

通过xib使用单元格,您可以重用其他表格

要创建xib,右键单击xcode上的项目选择新文件,然后选择UserInterface从中选择视图并保存名称

然后为xib文件的类五个适当的表视图单元类并在表视图单元格中创建控件的出口

在表视图控制器上加载nib文件在表视图控制器上声明这两行viewdidload函数

  @interface MatchesViewController ()
  @property (nonatomic, strong) UIScrollView *scrollView;
  @property (strong, nonatomic) IBOutlet UIScrollView *scrollVw;
  @property (strong, nonatomic) IBOutlet UIView *matchesView;
  @property (strong, nonatomic) IBOutlet UIView *dailyRecommendationsView;
  @property (strong, nonatomic) IBOutlet UIView *preferedMatchesView;
  @property (strong, nonatomic) IBOutlet UIView *broaderMatchesView;
  @property (strong, nonatomic) IBOutlet UIView *twowayMatcheVsiew;
  @property (strong, nonatomic) IBOutlet UIView *reverseMatchesView;
  @property (strong, nonatomic) IBOutlet UIView *decideLaterView;
  - (IBAction)btnMenuClicked:(id)sender;
  @end

  @implementation MatchesViewController

  - (void)viewDidLoad {
  [super viewDidLoad];
  self.title = @"Matches";
  self.navigationController.navigationBar.barTintColor = [UIColor colorWithRed:16/255.0 green:97/255.0 blue:61/255.0 alpha:1.0];

  [self.navigationController.navigationBar
  setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor whiteColor]}];


  [self.scrollVw addSubview:self.matchesView];
  [self.scrollVw setContentSize:CGSizeMake(self.view.frame.size.width, self.matchesView.frame.size.height)];

  [self.scrollVw addSubview:self.dailyRecommendationsView];
  [self.scrollVw setContentSize:CGSizeMake(self.view.frame.size.width, self.dailyRecommendationsView.frame.size.height)];

  [self.scrollVw addSubview:self.preferedMatchesView];
  [self.scrollVw setContentSize:CGSizeMake(self.view.frame.size.width, self.preferedMatchesView.frame.size.height)];

  [self.scrollVw addSubview:self.broaderMatchesView];
  [self.scrollVw setContentSize:CGSizeMake(self.view.frame.size.width, self.broaderMatchesView.frame.size.height)];

  [self.scrollVw addSubview:self.twowayMatcheVsiew];
  [self.scrollVw setContentSize:CGSizeMake(self.view.frame.size.width, self.twowayMatcheVsiew.frame.size.height)];

  [self.scrollVw addSubview:self.reverseMatchesView];
  [self.scrollVw setContentSize:CGSizeMake(self.view.frame.size.width, self.reverseMatchesView.frame.size.height)];

  [self.scrollVw addSubview:self.decideLaterView];
  [self.scrollVw setContentSize:CGSizeMake(self.view.frame.size.width, self.decideLaterView.frame.size.height)];

  self.view.backgroundColor = [UIColor clearColor];
  self.edgesForExtendedLayout = UIRectEdgeNone;


  CGFloat viewWidth = CGRectGetWidth(self.view.frame);
  // Do any additional setup after loading the view from its nib.
  HMSegmentedControl *segmentedControl1 = [[HMSegmentedControl alloc] initWithSectionTitles:@[@"New Matches", @"Daily Recommendations", @"Prefered Matches", @"Broader Matches", @"2-Way Matches", @"Reverse Matches", @"Decide Later"]];
  segmentedControl1.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleWidth;
  segmentedControl1.frame = CGRectMake(0, 0, viewWidth, 45);
  segmentedControl1.segmentEdgeInset = UIEdgeInsetsMake(0, 5, 0, 5);
  segmentedControl1.selectionStyle = HMSegmentedControlSelectionStyleFullWidthStripe;
  segmentedControl1.selectionIndicatorLocation = HMSegmentedControlSelectionIndicatorLocationDown;


  segmentedControl1.backgroundColor = [UIColor colorWithRed:167/255.0 green:148/255.0 blue:4/255.0 alpha:1.0];

  //segmentedControl1.selectionStyle = HMSegmentedControlSelectionStyleBox;
  //segmentedControl1.selectedSegmentIndex = HMSegmentedControlNoSegment;


  segmentedControl1.selectionIndicatorColor = [UIColor whiteColor];
  segmentedControl1.selectionIndicatorHeight = 2.0f;
  segmentedControl1.verticalDividerEnabled = YES;
  segmentedControl1.verticalDividerColor = [UIColor whiteColor];
  segmentedControl1.verticalDividerWidth = 1.0f;
  [segmentedControl1 setTitleFormatter:^NSAttributedString *(HMSegmentedControl *segmentedControl, NSString *title, NSUInteger index, BOOL selected) {
  NSAttributedString *attString = [[NSAttributedString alloc] initWithString:title attributes:@{NSForegroundColorAttributeName : [UIColor whiteColor]}];
  return attString;
  }];

  [segmentedControl1 addTarget:self action:@selector(segmentedControlChangedValue:) forControlEvents:UIControlEventValueChanged];
  [self.view addSubview:segmentedControl1];

  [self.navigationController.navigationBar
  setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor whiteColor]}];

  }


  - (void)segmentedControlChangedValue:(UISegmentedControl *)segment
  {

  switch (segment.selectedSegmentIndex) {
  case 0:
  self.matchesView.hidden = NO;
  self.dailyRecommendationsView.hidden = YES;
  self.preferedMatchesView.hidden = YES;
  self.broaderMatchesView.hidden = YES;
  self.twowayMatcheVsiew.hidden = YES;
  self.reverseMatchesView.hidden = YES;
  self.decideLaterView.hidden = YES;
  break;
  case 1:
  self.matchesView.hidden = YES;
  self.dailyRecommendationsView.hidden = NO;
  self.preferedMatchesView.hidden = YES;
  self.broaderMatchesView.hidden = YES;
  self.twowayMatcheVsiew.hidden = YES;
  self.reverseMatchesView.hidden = YES;
  self.decideLaterView.hidden = YES;
  break;
  case 2:
  self.matchesView.hidden = YES;
  self.dailyRecommendationsView.hidden = YES;
  self.preferedMatchesView.hidden = NO;
  self.broaderMatchesView.hidden = YES;
  self.twowayMatcheVsiew.hidden = YES;
  self.reverseMatchesView.hidden = YES;
  self.decideLaterView.hidden = YES;
  break;
  case 3:
  self.matchesView.hidden = YES;
  self.dailyRecommendationsView.hidden = YES;
  self.preferedMatchesView.hidden = YES;
  self.broaderMatchesView.hidden = NO;
  self.twowayMatcheVsiew.hidden = YES;
  self.reverseMatchesView.hidden = YES;
  self.decideLaterView.hidden = YES;
  break;
  case 4:
  self.matchesView.hidden = YES;
  self.dailyRecommendationsView.hidden = YES;
  self.preferedMatchesView.hidden = YES;
  self.broaderMatchesView.hidden = YES;
  self.twowayMatcheVsiew.hidden = NO;
  self.reverseMatchesView.hidden = YES;
  self.decideLaterView.hidden = YES;
  break;
  case 5:
  self.matchesView.hidden = YES;
  self.dailyRecommendationsView.hidden = YES;
  self.preferedMatchesView.hidden = YES;
  self.broaderMatchesView.hidden = YES;
  self.twowayMatcheVsiew.hidden = YES;
  self.reverseMatchesView.hidden = NO;
  self.decideLaterView.hidden = YES;
  break;
  case 6:
  self.matchesView.hidden = YES;
  self.dailyRecommendationsView.hidden = YES;
  self.preferedMatchesView.hidden = YES;
  self.broaderMatchesView.hidden = YES;
  self.twowayMatcheVsiew.hidden = YES;
  self.reverseMatchesView.hidden = YES;
  self.decideLaterView.hidden = NO;
  break;
  default:
  break;
  }

  }

  - (void)uisegmentedControlChangedValue:(UISegmentedControl *)segmentedControl {
  NSLog(@"Selected index %ld", (long)segmentedControl.selectedSegmentIndex);

  }

谢谢,