iOS-Cell上のButtonのクリックフィードバックについて

2773 ワード

最近、プロジェクトのボスはすべてのボタンにタッチフィードバックを加えると言っていますが、私のcellにbuttonを追加する問題があります.buttonをクリックすると、fuckはbuttonを長く押さない限り、ハイライト効果がありません.これは気まずいですが、ボタンのフィードバックが統一されていないと言われ、罰せられます...
ソリューション:
 self.tableView.delaysContentTouches = NO;
  for (id obj in self.tableView.subviews) {
        if ([obj respondsToSelector:@selector(setDelaysContentTouches:)]) {
            [obj setDelaysContentTouches:NO];
        }
    }

他の場所では、次のような他のソリューションが見られます.コードは、本文の末尾にリンクされています.
- (void)viewDidLoad {
    [super viewDidLoad];
    self.title = @"Button ";

    self.tableView.delaysContentTouches = NO;

    // iOS7
    for (id view in self.tableView.subviews)
    {
        if ([NSStringFromClass([view class]) isEqualToString:@"UITableViewWrapperView"])
        {
            if([view isKindOfClass:[UIScrollView class]])
            {
                UIScrollView *scroll = (UIScrollView *) view;
                scroll.delaysContentTouches = NO;
            }
            break;
        }
    }

    // iOS8  , iOS10, , 
    for (id view in self.tableView.subviews)
    {
        if ([NSStringFromClass([view class]) isEqualToString:@"UITableViewCellScrollView"])
        {
            if([view isKindOfClass:[UIScrollView class]])
            {
                UIScrollView *scroll = (UIScrollView *) view;
                scroll.delaysContentTouches = NO;
            }
            break;
        }
    }

    //  , , , 
    for (id obj in self.tableView.subviews) {
        if ([obj respondsToSelector:@selector(setDelaysContentTouches:)]) {
            [obj setDelaysContentTouches:NO];
        }
    }
}

シナリオ2:
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    [super touchesBegan:touches withEvent:event];
    [NSOperationQueue.mainQueue addOperationWithBlock:^{ self.highlighted = YES;}];
}

-(void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event{
    [super touchesCancelled:touches withEvent:event];
    [self performSelector:@selector(setDefault) withObject:nil afterDelay:0.1];
}

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
    [super touchesEnded:touches withEvent:event];
    [self performSelector:@selector(setDefault) withObject:nil afterDelay:0.1];
}

- (void)setDefault
{
    [NSOperationQueue.mainQueue addOperationWithBlock:^{ self.highlighted = NO; }];
}
  • シナリオ2のブロガーは、「このシナリオは比較的簡単で乱暴で、UIButtonの分類を作成し、pchファイルにインポートすると、buttonのクリック効果の問題を徹底的に解決し、シナリオよりも簡単に
  • 参考記事:https://juejin.im/entry/580f4f33570c350068fea175テキストリンク:http://www.jianshu.com/p/b909f8f3ca6c参考資料:https://stackoverflow.com/questions/19256996/uibutton-not-showing-highlight-on-tap-in-ios7