我正在以编程方式将点击手势识别器添加到自定义集合视图单元格类中。由于某种原因,它似乎不起作用。框架不为 0,isUserInteractionEnabled 设置为 true,并且我确保点击视图位于所有其他视图之上:
自定义单元格类:
let containerView: UIView = {
let view = UIView()
view.isUserInteractionEnabled = true
view.translatesAutoresizingMaskIntoConstraints = false
return view
}()
let tapView: UIView = {
let v = UIView()
v.isUserInteractionEnabled = true
return v
}()
let tap: UITapGestureRecognizer = {
let t = UITapGestureRecognizer(target: self, action: #selector(tapped))
return t
}()
@objc fileprivate func tapped() {
print("tap")
}
func setTap() {
self.containerView.addSubview(tapView)
tapView.frame = self.frame
// layout constraint code - printing frame shows its not 0 after this …Run Code Online (Sandbox Code Playgroud) uigesturerecognizer uitapgesturerecognizer uicollectionviewcell swift
我试图在 swift 4 的函数中为动态创建的 UILabel 添加点击手势,但它没有触发 UITapGestureRecognizer 函数。当我从 viewDidLoad 函数添加点击手势时它正在工作,但我必须从其他函数添加点击手势。
这是代码
override func viewDidLoad() {
super.viewDidLoad()
createLabel()
}
func createLabel() {
let label = UILabel()
label.text = "abc"
label.numberOfLines = 0
label.frame.size.width = self.otherlinksStack.bounds.width
label.font = label.font.withSize(17) // my UIFont extension
label.sizeToFit()
label.tag = 1
self.otherlinksStack.addSubview(label)
let labelTapGesture = UITapGestureRecognizer(target:self,action:#selector(self.doSomethingOnTap))
label.isUserInteractionEnabled = true
label.addGestureRecognizer(labelTapGesture)
}
@objc func doSomethingOnTap() {
print("tapped")
}
Run Code Online (Sandbox Code Playgroud) uilabel ios uitapgesturerecognizer programmatically-created swift4
我想让文本中的每个单词都可点击。然后,当点击特定单词时,它的文本颜色应该改变。
让每个单词都可以点击就可以了。但是,不知何故,当我单击某个单词时,文本颜色不会改变。这就是我走了多远:
import 'package:flutter/material.dart';
import 'package:flutter/gestures.dart';
class MakeStringClickable extends StatefulWidget{
@override
State<StatefulWidget> createState() {
// TODO: implement createState
return _MakeStringClickableState();
}
}
class _MakeStringClickableState extends State<MakeStringClickable>{
String textToSplit = 'I would like to make each word clickable. On click of a particular word it's color should change.';
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
alignment: Alignment.center,
child: _buildTextSpanWithSplittedText(textToSplit, context)
),
);
}
RichText _buildTextSpanWithSplittedText(String textToSplit, BuildContext context) {
bool isPressed = false;
final splittedText = textToSplit.split(" ");
final …Run Code Online (Sandbox Code Playgroud) 我在IOS5应用程序中为我的表格单元设置了一个手势识别器:
UITapGestureRecognizer* oneFingerDoubleTap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(cellOneFingerDoubleTap:)];
oneFingerDoubleTap.numberOfTapsRequired = 2;
[cell addGestureRecognizer:oneFingerDoubleTap];
Run Code Online (Sandbox Code Playgroud)
并实现了处理方法:
- (void)cellOneFingerDoubleTap:(id) sender
{
NSLog(@"taptap");
}
Run Code Online (Sandbox Code Playgroud)
它工作正常.我的问题是我无法通过窃听细胞传递细胞或其他一些数据.正如我所见(id)sender是UITapGestureRecognizer本身.
我的问题是:如何在处理程序方法(cellOneFingerDoubleTap)中获取tapped单元格?如何在处理程序方法中获取tapped单元格的索引?
谢谢!
我的问题类似于这个问题,唯一的例外是 - 我的ImageView出现在窗口内的同一个地方,里面有不同的内容.内容具有唯一标识符,我想用它来调用特定于内容的操作.
为了快速回顾一下,这家伙正在寻找一种方法将参数传递给initWithTarget方法的selector部分.
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapGesture:itemSKU:)];
Run Code Online (Sandbox Code Playgroud)
如何将属性传递给handleTapGesture方法,或者如何读取唯一值?
任何想法都赞赏.
编辑:内容从数据库中提取,每次都不同.唯一标识符非常类似于SSN - 不再重复.
在我的视图加载中我有两个UILabel,我为两者添加了相同的tapGesture.如果点击一个特定的标签,那么应该执行它的功能.但是我无法这样做?
-(void)viewDidLoad{
lblEditProfile.userInteractionEnabled = YES;
UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(labelClicked:)];
[tapGestureRecognizer setNumberOfTapsRequired:1];
[lblEditProfile addGestureRecognizer:tapGestureRecognizer];
[tapGestureRecognizer release];
lblViewDetails.userInteractionEnabled = YES;
tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(labelClicked:)];
[tapGestureRecognizer setNumberOfTapsRequired:1];
[lblViewDetails addGestureRecognizer:tapGestureRecognizer];
[tapGestureRecognizer release];
}
-(IBAction)labelClicked:(UITapGestureRecognizer*)tapGestureRecognizer
{
currentLabel = (UILabel *)tapGestureRecognizer.view;
NSLog(@"tap %@",tapGestureRecognizer.view);
if(currentLabel.text==@"Edit Profile")
{
UserProfile *userProfile = [[UserProfile alloc] initWithNibName:@"UserProfile" bundle:nil];
userProfile.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentModalViewController:userProfile animated:YES];
[userProfile release];
}
else
{
ViewDetails *viewDetails = [[ViewDetails alloc] initWithNibName:@"UserAppointments" bundle:nil];
viewDetails.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentModalViewController: viewDetails animated:YES];
[viewDetails release];
} …Run Code Online (Sandbox Code Playgroud) 我正在使用XCode 4.5.1.
我<UIGestureRecognizerDelegate>在.h文件和.m文件的开头添加了
@interface FirstViewController ()
@property (nonatomic, strong) UIImageView *img1;
@end
Run Code Online (Sandbox Code Playgroud)
然后viewDidLoad,以UIImageView编程方式创建
self.img1 = [[UIImageView alloc] initWithFrame:CGRectMake(50, -30, 44, 44)];
[self.img1 setImage:[UIImage imageNamed:@"image1.png"]];
[self.img1 setAlpha:0.8];
[self.img1 setHidden:NO];
[self.img1 setUserInteractionEnabled:YES];
[self.img1 setTag:901];
Run Code Online (Sandbox Code Playgroud)
然后
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(guessTapObject:)];
tap.numberOfTapsRequired = 1;
tap.numberOfTouchesRequired = 1;
tap.delegate = self;
[self.img1 addGestureRecognizer:tap];
[self.view addSubview:self.img1];
[self.view bringSubviewToFront:self.img1];
Run Code Online (Sandbox Code Playgroud)
最后
- (void)guessTapObject:(UITapGestureRecognizer *) gesture
{
// guessing the image
UIImageView *tapImageView = (UIImageView*) gesture.view;
NSLog(@"Gesture Tag: %d", tapImageView.tag); …Run Code Online (Sandbox Code Playgroud) 我想在UITextView中禁用双击.我已禁用长按:
- (void)addGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer {
if ([gestureRecognizer isKindOfClass:[UILongPressGestureRecognizer class]]) {
gestureRecognizer.enabled = NO;
}
[super addGestureRecognizer:gestureRecognizer];
return;
}
Run Code Online (Sandbox Code Playgroud)
我尝试用UITapGestureRecognizer做同样的事情,但它也禁止单击.
- (void)addGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer {
if ([gestureRecognizer isKindOfClass:[UILongPressGestureRecognizer class]]) {
gestureRecognizer.enabled = NO;
}
if ([gestureRecognizer isKindOfClass:[UITapGestureRecognizer class]]) {
gestureRecognizer.enabled = NO;
}
[super addGestureRecognizer:gestureRecognizer];
return;
}
Run Code Online (Sandbox Code Playgroud)
我该怎么办才能禁用双击?
我知道numberOfTapsRequired方法,但不知道如何在我的代码中完全应用它.
objective-c uitextview uigesturerecognizer uitapgesturerecognizer
我有一个简单的程序,可以创建一个子视图并在屏幕上设置动画.
作为该程序的一部分,我想在点击子视图时添加功能.我使用以下方法创建子视图,添加UITapGestureRecognizer,然后为子视图设置动画:
int randomName = arc4random() % ([pieceNames count] - 1);
int animationDuration = arc4random() % 5 + 5 ;
NSString *randomPiece = [pieceNames objectAtIndex:randomName];
float yStart = arc4random() % 650;
float yEnd = arc4random() % 650;
UIView *piece = [[PieceView alloc]initWithFrame:CGRectMake(100.0, yStart, 75.0, 75.0)];
[piece setValue:randomPiece forKey:@"name"];
UITapGestureRecognizer *recognizer = [[UITapGestureRecognizer alloc]initWithTarget:self
action:@selector(handleTouch:)];
[piece addGestureRecognizer:recognizer];
[[self view] addSubview:piece];
[UIView animateWithDuration:animationDuration
delay:0.0
options:UIViewAnimationOptionAllowUserInteraction
animations:^(void){
piece.center = CGPointMake(950.0, yEnd);
} completion:^(BOOL done){
[piece removeFromSuperview];
}];
Run Code Online (Sandbox Code Playgroud)
以下是处理点按的代码:
PieceView *pv = (PieceView *) …Run Code Online (Sandbox Code Playgroud) 我有以下UI层次结构:
UIView - > UIScrollView - > UIImageView
这是必要的,因为我想放大和缩小我的图像.到目前为止一切都很好,一切正常.现在我想检测图像的触摸位置.我已经阅读了很多,如果我只是在UIView中有一个UIImage,它就有效.不幸的是我需要它用于第一个描述的层次结构
class TestController: UIViewController, UIScrollViewDelegate {
@IBOutlet weak var scrollView: UIScrollView!
@IBOutlet weak var myImageView: UIImageView!
@IBOutlet var myGestureRecognizer: UITapGestureRecognizer!
override func viewDidLoad() {
super.viewDidLoad()
self.myImageView.addGestureRecognizer(myGestureRecognizer)
myImageView.userInteractionEnabled = true
}
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
let touch = touches.anyObject()! as UITouch
let location = touch.locationInView(self.myImageView)
println(location)
}
func viewForZoomingInScrollView(scrollView: UIScrollView) -> UIView? {
return self.myImageView
}
.....
}
Run Code Online (Sandbox Code Playgroud)
我试图将"myGestureRecognizer"添加到UIView以及UIImageView甚至所有3(UIView,UIScrollView,UIImageView).它对我不起作用,我不知道该怎么办.
如何在UIImageView中检测触摸的位置(只需单击),UIImageView放在UIScrollView中?
提前致谢!
ios ×5
iphone ×2
objective-c ×2
swift ×2
uiimageview ×2
xcode ×2
dart ×1
flutter ×1
ios5 ×1
selector ×1
split ×1
styles ×1
swift4 ×1
uilabel ×1
uiscrollview ×1
uitextview ×1
xcode4.5 ×1