简体   繁体   English

在UIView的UISegmentedControl中切换视图

[英]Switching views in UISegmentedControl in UIView

I am stuck up with a problem to switch views for UISegmentedControl . 我陷入了为UISegmentedControl切换视图的问题。 I have imported a framework of HMSegmentedControl to use multiple views (7 views). 我已经导入了HMSegmentedControl框架以使用多个视图(7个视图)。 I want to switch views when tapping on New Matches it should display matches view, and when tapping on the Daily Recommendations, it should display matches view and so on. 我想在点击“新匹配”时切换视图,它应该显示匹配视图,而当点击“每日推荐”时,它应该显示匹配视图,依此类推。 Below is my code. 下面是我的代码。 I have tried a lot in switching view by segmentedControlChangedValue , but it doesn't work for me. 我已经通过segmentedControlChangedValue在切换视图中尝试了很多,但是对我来说不起作用。 Anything to do or am I doing wrong? 有什么事情要做或我做错了吗?

  @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);

  }

Does your method segmentedControlChangedValue gets called ? 您的方法segmentedControlChangedValue是否被调用?

Try to add a breakpoint on it and to track segment.selectedSegmentIndex value. 尝试在其上添加断点并跟踪segment.selectedSegmentIndex值。 I think the problem comes from there. 我认为问题出在那儿。

As HMSegmentedControl is not a subclass of UISegmentedControl but of UIControl, the method should be : 由于HMSegmentedControl不是UISegmentedControl的子类,而是UIControl的子类,因此该方法应为:

  - (void)segmentedControlChangedValue:(HMSegmentedControl *)segment

instead of : 代替 :

  - (void)segmentedControlChangedValue:(UISegmentedControl *)segment

Hope this helps. 希望这可以帮助。

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

The event is not correct. 该事件不正确。 Try to do following code 尝试执行以下代码

[segmentedControl1 addTarget:self action:@selector(segmentedControlChangedValue:) forControlEvents:UIControlEventTouchUpInside];

Reinstalling your app. 重新安装您的应用程序。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM