在 xcode / swift 3 中点击视图以“选择”它
Posted
技术标签:
【中文标题】在 xcode / swift 3 中点击视图以“选择”它【英文标题】:Tapping a view in xcode / swift 3 to 'select' it 【发布时间】:2016-10-12 18:16:48 【问题描述】:我正在研究用于通过单击“选择”UIViews 的方法。在我的 UI 中,我有几个 UIViews 我希望是“可选择的”。选中后,我将拥有执行基本调整的控件,例如 alpha(让用户知道选择了哪个视图),以及一些更高级的功能,例如显示一组独特的菜单项。一次只能选择 1 个视图。这里没有多点触控。
问题是,我只看到使用 UICollectionViewCells 完成此操作。我的界面没有使用集合视图,所以这是不可能的。
对此的思考过程是 1 次点击手势以“选择”uiview,然后通过在视图边界之外点击“取消选择”它。
另一个思考过程是使用 UIButtons 而不是 UIViews 来利用 Selected 状态。
这将是更可行的解决方案?这甚至可能只使用 UIViews 吗?还是我应该回溯并改为使用 UIButtons?
谢谢。
【问题讨论】:
【参考方案1】:您需要在所需的 UIView 中添加手势识别器
class ViewController: UIViewController, UIGestureRecognizerDelegate
@IBOutlet weak var myView: UIView!
override func viewDidLoad()
super.viewDidLoad()
let tap = UITapGestureRecognizer(target: self, action: #selector(self.tap(_:)))
tap.delegate = self
myView.addGestureRecognizer(tap)
然后你需要添加代码来处理你的 UIView 发生的任何事情到手势识别器函数中:
func tap(_ gestureRecognizer: UITapGestureRecognizer)
myView.alpha = 0.5
一旦 UIView 被选中,这会将 UIView 的 alpha 属性更改为 0.5。
例如,现在您可以使用手势识别器放置第二个 UIView 并使用 alpha:
class ViewController: UIViewController, UIGestureRecognizerDelegate
@IBOutlet weak var myView: UIView!
@IBOutlet weak var secondView: UIView!
override func viewDidLoad()
super.viewDidLoad()
let tap = UITapGestureRecognizer(target: self, action: #selector(self.tap(_:)))
tap.delegate = self
myView.addGestureRecognizer(tap)
let tap2 = UITapGestureRecognizer(target: self, action: #selector(self.tap2(_:)))
tap.delegate = self
secondView.addGestureRecognizer(tap2)
func tap(_ gestureRecognizer: UITapGestureRecognizer)
myView.alpha = 0.5
secondView.alpha = 1
func tap2(_ gestureRecognizer: UITapGestureRecognizer)
myView.alpha = 1
secondView.alpha = 0.5
这样,根据你点击的 UIView,alpha 会改变...
编辑:
在此代码中,UIViews 将被“选中” - alpha 值会发生变化,并将在 0.8 秒的设定时间内变回。
class ViewController: UIViewController, UIGestureRecognizerDelegate
@IBOutlet weak var myView: UIView!
@IBOutlet weak var secondView: UIView!
override func viewDidLoad()
super.viewDidLoad()
let tap = UITapGestureRecognizer(target: self, action: #selector(self.tap(_:)))
tap.delegate = self
myView.addGestureRecognizer(tap)
let tap2 = UITapGestureRecognizer(target: self, action: #selector(self.tap2(_:)))
tap.delegate = self
secondView.addGestureRecognizer(tap2)
func tap(_ gestureRecognizer: UITapGestureRecognizer)
myView.alpha = 0.5
UIView.animate(withDuration: 0.8, animations:
self.myView.alpha = 1
)
func tap2(_ gestureRecognizer: UITapGestureRecognizer)
secondView.alpha = 0.5
UIView.animate(withDuration: 0.8, animations:
self.secondView.alpha = 1
)
【讨论】:
我现在正在打开 xcode 将其翻译成 swift 3 谢谢大卫!我有你的代码工作。只需要能够“取消选择”它(假设 alpha 回到 1)。并且一次只能选择 1 个视图。 你希望 UIViews 只是被选中一秒钟或类似的东西吗?还是您希望选择保留?如果你不和我说话,我帮不了你兄弟 只是阅读您的编辑兄弟 :) 我希望选择保留。也可以有 X 数量的视图。可能是 1 个,或 4 个,或者可能是 10 个。一次只能选择一个视图。如果选择了一个,并且用户轻按,它将取消选择。同样,如果选择了一个视图,并且用户点击了另一个视图,则选择会切换。 好的,所以在我当前的代码中,一次只选择一个视图。如果您希望选择结束,您需要执行以下操作:我将在一秒钟内编辑代码以上是关于在 xcode / swift 3 中点击视图以“选择”它的主要内容,如果未能解决你的问题,请参考以下文章