我是IOS编程的新手,我在点击按钮时显示一个视图,使用按钮方法中的以下代码。
@IBAction func moreButton(_ sender: Any)
{
self.helpView.isHidden = false
}
最初,self.helpView.isHidden
在viewDidLoad
方法中设置为true以隐藏视图。现在,我如何通过触摸视图外的任何位置来关闭此视图。从研究中我发现,可以通过创建适合整个viewController的透明按钮来完成。那么通过点击按钮,我们可以让视图解散。任何人都可以在swift 3中给我代码来创建这样的按钮。
或者,如果还有其他更好的隐藏视图的方式,欢迎使用。
我正在使用Xcode 8.2,swift 3.0
提前致谢。
答案 0 :(得分:34)
在触摸开始时你应该像
一样写 public class DimensionTO {
private Dimension dimension;
public Dimension getDimension () {
return dimension;
}
public void setUser(Dimension dimension) {
this.dimension= dimension;
}
}
答案 1 :(得分:4)
您可以使用$(document).ready(function(){
var sliderValue = 0;
if(localStorage.getItem("slider-value") !== undefined && localStorage.getItem("slider-value") !== ""){
sliderValue = localStorage.getItem("slider-value");
}
$("#slider-value").text(sliderValue);
$( "#slider" ).slider({
value: sliderValue,
slide: function( event, ui ) {
$( "#slider-value" ).html( ui.value );
localStorage.setItem("slider-value", ui.value);
}
});
方法:
touchesBegan
答案 2 :(得分:4)
Swift 5.1:
这应该有助于在视图外被触摸后将其关闭。
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?)
{
let touch = touches.first
if touch?.view != self.yourView
{ self.dismiss(animated: true, completion: nil) }
}
答案 3 :(得分:1)
在所选的moreButton中,您可以执行类似这样的操作
@IBAction func moreButton(_ sender: Any)
{
self.helpView.isHidden = false
let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(UIViewController.dismissView))
view.addGestureRecognizer(tap)
}
func dismissView() {
self.helpView.isHidden = true
self.view.removeGestureRecognizer(tap)
}
答案 4 :(得分:1)
在Swift 4中
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
let touch = touches.first
if touch?.view == self.view {
commentsTxtView.resignFirstResponder()
}
}
答案 5 :(得分:0)
您可以创建另一个透明按钮,或者您的基本视图(假设它是按钮下方的单个视图)可以解决您尝试执行的操作。首先,你需要让它可以点击。然后你想要处理轻敲或未开发时发生的事情的逻辑。
答案 6 :(得分:0)
你可以实现你想做的事情(用Swift 4.1和Xcode 9.3测试):
class ViewController: UIViewController {
...
private var dismissViewTap: UITapGestureRecognizer?
override func viewDidLoad() {
super.viewDidLoad()
dismissViewTap = UITapGestureRecognizer(target: self, action: #selector(dismissView))
if let tap = dismissViewTap {
view.addGestureRecognizer(tap)
} // if let
} // viewDidLoad
@objc private func dismissView() {
guard let tap = dismissViewTap else {
return
} // guard
guard helpView.isHidden == false else {
return
} // guard
helpView.isHidden = true
view.removeGestureRecognizer(tap)
} // dismissView
...
} // ViewController
如果您想保留手势识别器(可能是因为您多次打开helpView),请将dismissView更改为此版本:
...
@objc private func dismissView() {
guard helpView.isHidden == false else {
return
} // guard
helpView.isHidden = true
} // dismissView
...
这就是......!
答案 7 :(得分:0)
您可以在Swift 4中使用此方法。
将标签号添加到要添加操作的 uiview
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?)
{
if touches.first?.view?.tag == 10{
dismiss(animated: true, completion: nil)
super.touchesEnded(touches , with: event)
}
}
答案 8 :(得分:0)
迅速
override func touchesBegan(_ touches: Set<AnyHashable>, withEvent event: UIEvent) {
var touch: UITouch? = touches.first
if touch?.view != self.yourView {
self.yourView.isHidden = true
}
}
客观C
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
if(touch.view != self.yourView){
self.yourView.hidden = YES;
}
}
答案 9 :(得分:0)
在我的情况下,我遵循touchesEnded逻辑,
-(void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
if([touch view]== self.UIViewThatNeedsToBeDismissed) {
NSLog(@"inside view touch");
} else {
NSLog(@"release it");
}
}
答案 10 :(得分:0)
您可以使用以下功能,对视图名称的此检查将不起作用,但是如果您有多个视图,则会出现问题,您会发现,如果在第二个视图内点击,则会执行相同的操作。我希望添加tapGesture。这是另一种解决方案。
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
}
答案 11 :(得分:0)
Date== 2012-04-21 and ItemId==2
如果有人想要复制意大利面,那么您可以通过自定义UIPresentationController来做到这一点