iOS-Cell上のButtonのクリックフィードバックについて
2773 ワード
最近、プロジェクトのボスはすべてのボタンにタッチフィードバックを加えると言っていますが、私のcellにbuttonを追加する問題があります.buttonをクリックすると、fuckはbuttonを長く押さない限り、ハイライト効果がありません.これは気まずいですが、ボタンのフィードバックが統一されていないと言われ、罰せられます...
ソリューション:
他の場所では、次のような他のソリューションが見られます.コードは、本文の末尾にリンクされています.
シナリオ2:シナリオ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
ソリューション:
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; }];
}