【问题标题】:UIControlEventValueChanged not working when i tapped an already selected segment section当我点击已选择的段部分时,UIControlEventValueChanged 不起作用
【发布时间】:2012-07-03 02:35:07
【问题描述】:

我的目标是在我点击已选择的段时再次触发 UIControlEventValueChanged 委托。

所以我参考了以下链接

uisegmentedcontrol-register-taps-on-selected-segment

maintaining-selection-in-uisegmentedcontrol

根据链接,我创建了一个 uisegmentedcontrol 子类,实现了- (void) setSelectedSegmentIndex:(NSInteger)toValue { 方法并编写了代码(来自上述链接)。

它在 Ipad1 上运行良好。但是,当点击已选择的段时,继承/子类中的 setSelectedSegmentIndex 不会在 Ipad2 中触发!!!!但是当我点击未选择的段索引时它工作正常。

我做的代码如下

主类

ReselectableSegmentControl *firstNextSegmentedControl = [[ReselectableSegmentControl alloc] init];
firstNextSegmentedControl.frame = CGRectMake(xCordinate, 255, 188, 50);
firstNextSegmentedControl.segmentedControlStyle = UISegmentedControlStyleBar;
firstNextSegmentedControl.tag = index + 1;      
[firstNextSegmentedControl addTarget:self action:@selector(firstNextThenSegmentedControlValueChanged:) forControlEvents:UIControlEventValueChanged];
[firstNextSegmentedControl insertSegmentWithImage:[UIImage imageNamed:@"NoTimerCounter.png"] atIndex:0 animated:YES];
[firstNextSegmentedControl insertSegmentWithImage:[UIImage imageNamed:@"Timer.png"] atIndex:1 animated:YES];
[firstNextSegmentedControl insertSegmentWithImage:[UIImage imageNamed:@"Counter.png"] atIndex:2 animated:YES];              
firstNextSegmentedControl.selectedSegmentIndex = 0;

[self.view addSubview:firstNextSegmentedControl];
[firstNextSegmentedControl release];
firstNextSegmentedControl = nil;

UISegmentSubClass .h 文件

#import <Foundation/Foundation.h>

@interface ReselectableSegmentControl : UISegmentedControl {    

}

@end

UISegmentSubClass .m 文件

-(void)setSelectedSegmentIndex:(NSInteger )selectedValue{

    if (selectedValue==self.selectedSegmentIndex) {

           [self sendActionsForControlEvents:UIControlEventValueChanged];
    }
       [super setSelectedSegmentIndex:selectedValue];  
}

-(void)setSelectedSegmentIndex:(NSInteger )selectedValue{


    if (self.selectedSegmentIndex == selectedValue) {           

              //doing my operation if tapped again the selected value.

    else {

        super.selectedSegmentIndex = selectedValue;
    }
}

- (void) setSelectedSegmentIndex:(NSInteger)toValue {

      if (self.selectedSegmentIndex == toValue) {

          [super setSelectedSegmentIndex:UISegmentedControlNoSegment];

    } else {

       [super setSelectedSegmentIndex:toValue];        
   }

}

以上所有方法都不适用于 Ipad2。

感谢您对此问题的任何帮助。

谢谢。

【问题讨论】:

  • 您正在尝试触发值更改方法而不更改值。只需创建一个在您想要的事件中发生的新方法并使用它。

标签: iphone objective-c uisegmentedcontrol ipad-2 uicontrolevents


【解决方案1】:

呼……终于找到解决办法了……

我使用 UITapGestureRecognizer 而不是 addTarget:self action:@selector()

现在我的代码看起来像,

UISegmentedControl *firstNextSegmentedControl = [[UISegmentedControl alloc] init];
firstNextSegmentedControl.frame = CGRectMake(xCordinate, 255, 188, 50);
firstNextSegmentedControl.segmentedControlStyle = UISegmentedControlStyleBar;
firstNextSegmentedControl.selectedSegmentIndex = 0; 

[firstNextSegmentedControl insertSegmentWithImage:[UIImage imageNamed:@"NoTimerCounter.png"] atIndex:0 animated:YES];
[firstNextSegmentedControl insertSegmentWithImage:[UIImage imageNamed:@"Timer.png"] atIndex:1 animated:YES];
[firstNextSegmentedControl insertSegmentWithImage:[UIImage imageNamed:@"Counter.png"] atIndex:2 animated:YES];          

               //Added UITapGestureRecognizer instead of using addTarget: method        
                UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] init];         
                tapGesture addTarget:self action:@selector(firstNextThenSegmentedControlValueChanged:) ];
                [firstNextSegmentedControl addGestureRecognizer:tapGesture];
                [tapGesture release];
                tapGesture = nil;

[self.view addSubview:firstNextSegmentedControl];
[firstNextSegmentedControl release];
firstNextSegmentedControl = nil;



-(void)firstNextThenSegmentedControlValueChanged:(UITapGestureRecognizer *)tapGesture{  

   UISegmentedControl *segmentControl = (UISegmentedControl *)tapGesture.view;      

   switch (segmentControl.selectedSegmentIndex) {

    case 0:
     [self doIt:segmentControl];                
    break;  

    default:    
    break;

    }
}

【讨论】:

    猜你喜欢
    • 2018-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-26
    • 2021-11-28
    • 1970-01-01
    • 2019-03-31
    • 1970-01-01
    相关资源
    最近更新 更多