在本文中,我们将详细介绍如何在Swift中关闭ViewController?的各个方面,并为您提供关于swiftuinavigationview的相关解答,同时,我们也将为您带来关于iOSSwiftw
在本文中,我们将详细介绍如何在 Swift 中关闭 ViewController?的各个方面,并为您提供关于swiftui navigationview的相关解答,同时,我们也将为您带来关于iOS Swift window.rootViewController vs presentViewController、ios – Swift playground:获取ViewController以调用presentViewController、ios – Swift – 如何从ViewController中按下UItableViewCell中的动作按钮?、ios – Swift:类型’ViewController’不符合协议’UIPageViewControllerDataSource’的有用知识。
本文目录一览:- 如何在 Swift 中关闭 ViewController?(swiftui navigationview)
- iOS Swift window.rootViewController vs presentViewController
- ios – Swift playground:获取ViewController以调用presentViewController
- ios – Swift – 如何从ViewController中按下UItableViewCell中的动作按钮?
- ios – Swift:类型’ViewController’不符合协议’UIPageViewControllerDataSource’
如何在 Swift 中关闭 ViewController?(swiftui navigationview)
我试图通过dismissViewController
调用IBAction
@IBAction func cancel(sender: AnyObject) { self.dismissViewControllerAnimated(false, completion: nil) println("cancel")}@IBAction func done(sender: AnyObject) { self.dismissViewControllerAnimated(false, completion: nil) println("done")}
我可以在控制台输出中看到 println 消息,但 ViewController 永远不会被解雇。可能是什么问题呢?
答案1
小编典典从您的图像看来,您似乎使用 push 呈现了 ViewController
dismissViewControllerAnimated
用于关闭使用模态呈现的ViewController
Swift 2
navigationController.popViewControllerAnimated(true)
Swift 4
navigationController?.popViewController(animated: true)dismiss(animated: true, completion: nil)
iOS Swift window.rootViewController vs presentViewController
设置rootviewController:
let storyBoard : UIStoryboard = UIStoryboard(name: "Main",bundle: nil) var vc : UIViewController = storyBoard.instantiateViewControllerWithIdentifier("viewTarget") as TargetViewController var window :UIWindow = UIApplication.sharedApplication().keyWindow! window.rootViewController = vc; window.makeKeyAndVisible()
更改模态视图:
let storyBoard : UIStoryboard = UIStoryboard(name: "Main",bundle: nil) let initViewController: UIViewController = storyBoard.instantiateViewControllerWithIdentifier("viewTarget") as TargetViewController self.presentViewController(initViewController,animated: false,nil)
当我需要向用户呈现其他视图时,我很困惑.
附:就我而言,我的应用程序以登录表单作为rootViewController开始.登录后,我认为最好更改rootViewController,但我是对的吗?
解决方法
let storyBoard : UIStoryboard = UIStoryboard(name: "Main",bundle: nil) let initViewController: UIViewController = storyBoard.instantiateViewControllerWithIdentifier("viewTarget") as TargetViewController self.window?.rootViewController? = initViewController
在这段代码中,我们只是从AppDelegate覆盖了rootview控制器.
ios – Swift playground:获取ViewController以调用presentViewController
解决方法
不鼓励在分离的视图控制器上呈现视图控制器
在我的情况下,警报控制器在屏幕上超短暂闪烁,然后消失.也许你可以稍微提高一点吗?
无论如何,这是我在操场上创建视图控制器的方式:
import UIKit import XCPlayground class RootViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() self.view.frame = CGRect(x: 0,y: 0,width: 350,height: 420) self.view.backgroundColor = UIColor.redColor() } } class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource { var tableView: UITableView! let items = ["Hello 1","Hello 2","Hello 3"] var alertController : UIAlertController? { didSet { if alertController == nil { print("alertController set to nil") } else { print("alertController set to \(alertController)") } } } override func viewDidLoad() { super.viewDidLoad() self.view.frame = CGRect(x: 0,width: 320,height: 480) self.tableView = UITableView(frame:self.view.frame) self.tableView!.dataSource = self self.tableView!.registerClass(UITableViewCell.self,forCellReuseIdentifier: "cell") self.view.addSubview(self.tableView) } func tableView(tableView: UITableView,numberOfRowsInSection section: Int) -> Int{ return self.items.count; } func tableView(tableView: UITableView,cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{ let cell = tableView.dequeueReusableCellWithIdentifier("cell",forIndexPath: indexPath) as UITableViewCell cell.textLabel?.text = "\(self.items[indexPath.row])" return cell } override func viewDidAppear(animated: Bool) { alertController = UIAlertController.init(title: "My Title",message: "Testing in Playground",preferredStyle: .Alert) let okAction = UIAlertAction(title: "Ok",style: .Default) { (_) -> Void in // Some action here print("hit okay button") } alertController!.addAction(okAction) ctrl.presentViewController(alertController!,animated: false,completion: { print("done presenting") }) } } var ctrl = ViewController() var rootVC = RootViewController() rootVC.addChildViewController(ctrl) rootVC.view.addSubview(ctrl.view) XCPlaygroundPage.currentPage.liveView = rootVC.view
而我在这里做的是创建一个“根视图控制器”,添加一个带有表的子视图控制器(试图让一些视图控制器“附加”到其他东西)然后我试图呈现一个警报控制器在那.
ios – Swift – 如何从ViewController中按下UItableViewCell中的动作按钮?
> swift: how to get the indexpath.row when a button in a cell is tapped? 14个
我在UITableViewCell中有一个操作按钮,我想检测按钮的按下时间以及ViewController中按下的单元格编号,以便在ViewController.swift中创建音频播放列表.
我已经陷入这个问题一段时间了,我真的很赞赏你的建议.这是代码.
ViewController.swift
import UIKit class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource { @IBOutlet weak var tableView: UITableView! override func viewDidLoad() { super.viewDidLoad() tableView.delegate = self tableView.dataSource = self tableView.register(UINib(nibName: "Cell",bundle: nil),forCellReuseIdentifier: "cell") } func tableView(_ tableView: UITableView,numberOfRowsInSection section: Int) -> Int { return 3 } func tableView(_ tableView: UITableView,cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "cell") as! Cell return cell } }
Cell.swift
import UIKit class Cell: UITableViewCell { @IBOutlet weak var button: UIButton! @IBAction func buttonpressed(_ sender: Any) { ***[Code to send the pressed cell's number to ViewController]*** } }
解决方法
您可以从表视图中找到单元索引路径. (我假设按单元格编号表示索引路径)
protocol CellDelegate: class { func didTap(_ cell: Cell) } class Cell: UITableViewCell { weak var delegate: CellDelegate? @IBAction func buttonpressed(_ sender: Any) { delegate?.didTap(self) } } class ViewController: UIViewController,CellDelegate { func tableView(_ tableView: UITableView,cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = ... cell.delegate = self return cell } func didTap(_ cell: Cell) { let indexPath = self.tableView.indexPath(for: cell) // do something with the index path } }
ios – Swift:类型’ViewController’不符合协议’UIPageViewControllerDataSource’
我实际上设法找到了其他人正在做同样的git repo,但是在克隆他们的项目并在Xcode中打开它之后,我遇到了同样的错误.在实现UIPageViewControllerDataSource协议时,除了协议一致性问题之外,我已经设法解决了大部分问题.
说实话,我不完全明白其用法?而且!在斯威夫特,如果这是导致我的问题.删除!从协议的方法实现中的变量引起其他错误.
有人可以帮忙吗?
class ViewController: UIViewController,UIPageViewControllerDataSource { var pageViewController : UIPageViewController? var pageTitles = ["Over 200 Tips and Tricks","discover Hidden Features","Bookmark Favorite Tip","FreeRegular Update"] var pageImages = ["page1.png","page2.png","page3.png","page4.png"] var currentIndex = 0 @IBAction func startWalkthrough(sender: UIButton) { var startingViewController : PageContentViewController = self.viewControllerAtIndex(0)! var viewControllers : NSArray = [startingViewController] self.pageViewController!.setViewControllers(viewControllers,direction: .Forward,animated: false,completion: nil) } override func viewDidLoad() { super.viewDidLoad() //Create page view controller self.pageViewController = UIPageViewController(transitionStyle: .Scroll,navigationorientation: .Horizontal,options: nil) self.pageViewController!.dataSource = self let startingViewController : PageContentViewController = self.viewControllerAtIndex(0)! let viewControllers: NSArray = [startingViewController] self.pageViewController!.setViewControllers(viewControllers,completion: nil) // Change the size of page view controller self.pageViewController!.view.frame = CGRectMake(0,self.view.frame.size.width,self.view.frame.size.height - 30); self.addChildViewController(self.pageViewController!) self.view.addSubview(self.pageViewController!.view) self.pageViewController!.didMovetoParentViewController(self) } func pageViewController(pageViewController: UIPageViewController!,viewControllerBeforeViewController viewController: UIViewController!) -> UIViewController! { var index = (viewController as PageContentViewController).pageIndex if index == 0 || index == NSNotFound { return nil } index!-- println("Decreasing Index: \(index)") return self.viewControllerAtIndex(index!) } func pageViewController(pageViewController: UIPageViewController!,viewControllerAfterViewController viewController: UIViewController!) -> UIViewController! { var index = (viewController as PageContentViewController).pageIndex if index == NSNotFound { return nil } index!++ println("Increasing Index: \(index)") if index == self.pageTitles.count { return nil; } return self.viewControllerAtIndex(index!); } func viewControllerAtIndex(index : Int) -> PageContentViewController? { if self.pageTitles.count == 0 || index >= self.pageTitles.count { return nil; } // Create a new view controller and pass suitable data. let pageContentViewController = self.storyboard!.instantiateViewControllerWithIdentifier("PageContentViewController") as PageContentViewController pageContentViewController.imageFile = self.pageImages[index] pageContentViewController.titleText = self.pageTitles[index] pageContentViewController.pageIndex = index return pageContentViewController; } func presentationCountForPageViewController(pageViewController: UIPageViewController) -> Int { return self.pageTitles.count } func presentationIndexForPageViewController(pageViewController: UIPageViewController) -> Int { return 0 } }
解决方法
func pageViewController(pageViewController: UIPageViewController!,viewControllerBeforeViewController viewController: UIViewController!) -> UIViewController! func pageViewController(pageViewController: UIPageViewController!,viewControllerAfterViewController viewController: UIViewController!) -> UIViewController!
但现在它们是:
func pageViewController(pageViewController: UIPageViewController,viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? func pageViewController(pageViewController: UIPageViewController,viewControllerAfterViewController viewController: UIViewController) -> UIViewController?
当您对不符合协议有疑问时,命令单击协议名称将带您进入协议声明,您可以在其中查看是否正确实现其接口
今天关于如何在 Swift 中关闭 ViewController?和swiftui navigationview的介绍到此结束,谢谢您的阅读,有关iOS Swift window.rootViewController vs presentViewController、ios – Swift playground:获取ViewController以调用presentViewController、ios – Swift – 如何从ViewController中按下UItableViewCell中的动作按钮?、ios – Swift:类型’ViewController’不符合协议’UIPageViewControllerDataSource’等更多相关知识的信息可以在本站进行查询。
本文标签: