我是IOS的新手,我陷入了这个奇怪的问题 它真的是一个简单的演示,我只想跳转到另一个viewController。
//parentViewController
import UIKit
import SnapKit
class ViewController: UINavigationController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
self.view.backgroundColor = UIColor.whiteColor()
let button = UIButton()
button.frame = CGRectMake(100, 100, 200, 100)
button.backgroundColor = UIColor.greenColor()
button.setTitle("Search Button", forState: UIControlState.Normal)
button.addTarget(self, action: "buttonAction:", forControlEvents: UIControlEvents.TouchUpInside)
self.view.addSubview(button)
}
func buttonAction(sender:UIButton!){
print("Button tapped")
let searchVC = MfSearchViewController()
self.pushViewController(searchVC, animated: true)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
这是目标viewController
class MfSearchViewController:UIViewController{
/// UI component
var tableView:UITableView!
var searchBar:UISearchBar!
var searchLabel:UILabel!
///
var dataSource = NSMutableArray()
var currentIndexPaht: NSIndexPath?
var screenObj = UIScreen.mainScreen().bounds
override func viewDidLoad() {
super.viewDidLoad()
for index in 0...12{
let model = SearchResultModel(searchWord: "java\(index+1)", searchResult: "1500")
dataSource.addObject(model)
}
self.view.backgroundColor = UIColor.lightGrayColor()
tableView = UITableView(frame: self.view.bounds, style: UITableViewStyle.Plain)
//tableView = UITableView(frame: CGRectMake(0,20,screenObj.width,screenObj.height), style: UITableViewStyle.Grouped)
tableView.delegate = self
tableView.dataSource = self
view.addSubview(tableView)
self.title = "target"
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
/*
// MARK: - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
// Get the new view controller using segue.destinationViewController.
// Pass the selected object to the new view controller.
}
*/
}
extension MfSearchViewController: UITableViewDataSource{
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cellIdentifier: String = "SearchResultCellIdentifier"
// may be no value, so use optional
var cell: SearchResultCell? = tableView.dequeueReusableCellWithIdentifier(cellIdentifier) as? SearchResultCell
if cell == nil { // no value
cell = SearchResultCell(style: UITableViewCellStyle.Default, reuseIdentifier: cellIdentifier)
}
let model: SearchResultModel? = dataSource[indexPath.row] as? SearchResultModel
cell!.configureCell(model)
return cell!
}
func tableView(tableView: UITableView,numberOfRowsInSection section: Int) -> Int {
return dataSource.count
}
}
extension MfSearchViewController: UITableViewDelegate{
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
print(indexPath);
}
}
但是在pushViewcontroller之后,来自parentViewController的按钮仍然存在... plz帮助我....非常感谢...
答案 0 :(得分:0)
我不是UIViewControllers和故事板的专家,但现在你可以在更改viewControllers之前删除按钮。
button.removeFromSuperView()
您必须使按钮成为全局属性,以便可以在创建它的ViewDidLoad之外调用它。 我不确定这是否是预期的行为,或者是否应该自动删除该按钮。
答案 1 :(得分:0)
您正在向UINavigationController的视图添加子视图。这样做会导致视图出现在其视图控制器的所有后续屏幕上。通常不需要向UINavigationController的视图添加视图。相反,您应该创建动态推送并弹出到导航控制器堆栈上的视图控制器。也就是说,使用按钮创建一个根视图控制器,该按钮调用执行以下操作:
let searchVC = MfSearchViewController()
self.navigationController.pushViewController(searchVC, animated: true)
在新视图转换时关闭按钮转换视图。简单地调用button.removeFromSuperView()
会导致按钮消失,但会非常突然,并且不符合iOS用户体验或设计模式。
答案 2 :(得分:0)
我知道你会得到答案,但也许我可以发现一些关于视图之间转换的技巧。
self.pushViewController(searchVC, animated: true)
“自我”表示您在UIViewController
对象中,而UIViewController
会推送它。因此,例如,如果您从A中推送B类,则在B类中,您将无法在导航堆栈的控制下生根。你也不在UINavigationController
堆栈。
self.navigationController.pushViewController(searchVC, animated: true)
现在您正在使用UIViewController
个对象UINavigationController
并且能够处理B类的导航堆栈。这是推送,呈现或处理UIView
个对象之间的每个转换的真正方法