我最近开始了自己的处女秀,所以我仍然无法掌握。
我试图制作一个ViewController来显示一些结果,一个元素列表,每个元素都有2个字符串和一个图像。因此,我得到了以下代码:
@objc class TableViewController: UITableViewController {
var tableList = [cellData]()
var viewImages = false
var advancedMode = false
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.allowsSelection = false
self.tableView.delegate = self
}
func goBack(){
dismiss(animated: true, completion: nil)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return tableList.count;
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
switch tableList[indexPath.row].cell {
case 2:
let cell = Bundle.main.loadNibNamed("TableViewCell2", owner: self, options: nil)?.first as! TableViewCell2
cell.Header.text = tableList[indexPath.row].header
cell.Details.text = tableList[indexPath.row].details
cell._Image.image = tableList[indexPath.row]._image
return cell
default:
let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier", for: indexPath)
return cell
}
}
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat
{
switch tableList[indexPath.row].cell {
case 1:
return 127.0;
case 2:
return 50 +
((tableList[indexPath.row].details != nil && tableList[indexPath.row].details.count > 0) ? 100 : 0) +
(tableList[indexPath.row]._image != nil && tableList[indexPath.row]._image.size.height > 0
? ((tableList[indexPath.row]._image.size.width/self.view.frame.size.width) * tableList[indexPath.row]._image.size.height)
: 0); // TODO: here we should get the proper height from the image based on the with of the view
default:
return 50.0;
}
}
@objc
func clearTable() ->Void {
tableList.removeAll()
}
@objc
func addElement(header: String, details: String, image:UIImage) -> Void{
tableList.append(cellData(cell: 2, header: header, details: details, _image: image))
}
}
通过列出结果,此代码非常有用。但我想添加后退功能。
我尝试将第一个控制器嵌入导航控件,但对于tableViewController,没有带后退按钮的标题。不在情节提要中或运行程序时。
我尝试通过将背景设置为红色并添加UIButton来使用此功能,但是没有按钮。但是在运行程序时出现了红色区域
override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { .. }
我尝试用向后滑动手势替换按钮,但是那里也没有反应
有什么想法可能是我犯了一个错误或我想念什么?
更新1 : 在上一个视图控制器中,我使用以下代码转到TableViewController:
TableViewController *vc = [[TableViewController alloc] init];
[self presentViewController:vc animated:YES completion:nil];
完成某个过程/条件后,我需要跳到TableViewController(因此不必按按钮)
答案 0 :(得分:1)
我认为您正在使用情节提要。当您通过拖动到另一个视图控制器并通过鼠标创建一个segue时,应该出现一个小菜单,如下所示:
在Action Segue
部分下,有segue类型。对于您的情况,您需要选择Show
。现在,如果您将第一个视图控制器嵌入到导航控制器中,则后退按钮将出现在第二个视图控制器上。
如果您的第一个视图控制器已经嵌入导航控制器中,并且您将Show
创建到另一个控制器中,则这也将起作用。
要检查segue的种类,只需点击其箭头,然后在实用程序区域(右侧面板)中,您可以在Kind
部分下查看其种类。
编辑
如果您使用的是Objective-C并以编程方式进行隔离,则可以采用以下方法:
每个视图控制器都有一个名为navigationController
的属性,该属性持有对其所嵌入的导航控制器的引用。如果您的视图控制器已经嵌入在导航控制器中,请按照以下步骤进行过渡:
- (IBAction)buttonTapped:(UIButton *)sender {
ViewController2 *viewController2 = [[ViewController2 alloc ] init];
[self.navigationController pushViewController: viewController2 animated:YES];
}
P.s。您可以查看斯坦福大学的iOS开发课程:CS193P。它是免费的。
答案 1 :(得分:0)
您是否尝试过将左栏按钮设置为:
let button1 = UIBarButtonItem(image: UIImage(named: "imagename"), style: .plain, target:
self, action: Selector("action")) // action:#selector(Class.MethodName) for swift 3
self.navigationItem.rightBarButtonItem = button1
答案 2 :(得分:0)
好吧,当我在CS193P上观看了一些视频(感谢@Tigran Iskandaryan)并在另一个项目中播放后,我找到了解决方案。
因此,问题是:
[self presentViewController:vc animated:YES completion:nil];
根据我的阅读,为了使NavigationController能够正常工作,需要将ViewController堆叠起来。而且因为我使用了一种不同的方式来跳转到下一个ViewController,所以不需要显示导航栏。
因此,解决方法是使用pushViewController
而不是presentViewController
。这样,ViewController将被堆叠在NavigationBar中。
因此,它将是:
TableViewController *vc = [[TableViewController alloc] init];
[self.navigationController pushViewController:vc animated:YES];
请注意,为了使其正常工作,我必须确保将nMvigationController嵌入到根ViewController中