- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试在单击 collectionViewCell 中的按钮时显示 ViewController。
我有一个动态 tableView,一个 tableViewCells 中的一个动态 collectionView。
在每个 collectionViewCells 中,有一个按钮应该是 segue 的触发器,以显示另一个 View Controller
我尝试使用以下代码,但应用程序崩溃了:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Receiver (<Okm.bienController: 0x7fc8b0cfb1a0>) has no segue with identifier 'extend''
我的 storyBoard 中的 segue 标识符是“extend”。
class photoCell: UITableViewCell, UICollectionViewDelegateFlowLayout, UICollectionViewDelegate, UICollectionViewDataSource {
...
func extendFunc(sender : UIButton) {
bienController().performSegueWithIdentifier("extend", sender: sender.tag)
}
}
class bienController : UIViewController, UITableViewDelegate, UITableViewDataSource {
...
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "extend" {
let backItem = UIBarButtonItem()
backItem.title = ""
navigationItem.backBarButtonItem = backItem
let extendView = segue.destinationViewController as! extendController
extendView.image = image[sender]
}
}
}
然后,我尝试了这个:
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
self.segue()
// self.performSegueWithIdentifier("image", sender: nil)
}
func clickExtend(sender:Int){
print(sender) //print the correct tag!
self.segue()
}
func segue(){
self.performSegueWithIdentifier("image", sender: nil)
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "image" {
let backItem = UIBarButtonItem()
backItem.title = ""
navigationItem.backBarButtonItem = backItem
// print(sender)
let extendView = segue.destinationViewController as! extendController
extendView.image = UIImage(named: "maison")
}
}
}
我将函数 clickExtend() 与我的 collectionCell 的按钮链接在一起。当它来自 didSelectRowAtIndexPath 时,segue 有效,但是当我单击按钮扩展时,它崩溃并出现相同的错误:“由于未捕获的异常‘NSInvalidArgumentException’而终止应用程序,原因:‘Receiver () has no segue with identifier‘image’” '
(我更改了 'image' 的 segue 标识符)
然后我尝试直接显示 View Controller 而不执行 Segue。
class photoCategoryCell: UITableViewCell, UICollectionViewDelegateFlowLayout, UICollectionViewDelegate, UICollectionViewDataSource {
...
func extendFunc(sender : UIButton) {
print(sender.tag)
bienController().boo(sender.tag)
}
}
和:
class bienController : UIViewController, UITableViewDelegate, UITableViewDataSource {
...
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
self.boo(indexPath.row)
}
func boo(sender:Int){
let storyboard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let vc:UIViewController = storyboard.instantiateViewControllerWithIdentifier("extend") as! extendController
let backItem = UIBarButtonItem()
backItem.title = ""
navigationItem.backBarButtonItem = backItem
self.showViewController(vc as UIViewController, sender: nil)
}
}
当我点击一个 tableViewCell 时,它显示了 View Controller ,但是当我点击 collectionViewCell 中的“扩展”按钮时,没有任何反应..
拜托,我需要帮助!!
谢谢!!
完整代码
import UIKit
class photoCategoryCell: UITableViewCell, UICollectionViewDelegateFlowLayout, UICollectionViewDelegate, UICollectionViewDataSource {
@IBOutlet weak var collectionView : UICollectionView!
var hid = [true, true, true, true, true, true] //supp
var imageList = [UIImage]()
func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
return 1
}
func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 10
}
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCellWithReuseIdentifier("photoCell", forIndexPath: indexPath) as! photoCollectionViewCell
cell.photoView.image = self.imageList[indexPath.row]
cell.photoView.contentMode = .ScaleAspectFill
cell.extend.hidden = true
cell.blurView.hidden = true
cell.extend.tag = indexPath.row
cell.extend.addTarget(self, action: #selector(photoCategoryCell.extendFunc(_:)), forControlEvents: .TouchUpInside)
return cell
}
func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
if let cell : photoCollectionViewCell = collectionView.cellForItemAtIndexPath(indexPath) as! photoCollectionViewCell!
{
if cell.blurView.hidden == true {
cell.blurView.hidden = false
cell.extend.hidden = false
} else {
cell.blurView.hidden = true
cell.extend.hidden = true
}
}
}
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
let cellWidth = (UIScreen.mainScreen().bounds.width) / 2
return CGSize(width: cellWidth, height: cellWidth)
}
func extendFunc(sender : UIButton) {
print(sender.tag)
bienController().boo(sender.tag)
}
}
import UIKit
class bienController : UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var tableView : UITableView!
@IBOutlet weak var tableViewTwo : UITableView!
@IBOutlet weak var tableHeight : NSLayoutConstraint!
@IBOutlet weak var viewBlack : UIView!
let onglet = ["One", "Two", "Three", "Four", "Five"]
var imageNb : Int = 3
override func viewDidLoad() {
super.viewDidLoad()
// let gradient: CAGradientLayer = CAGradientLayer()
// gradient.frame = self.viewBlack!.bounds
// gradient.colors = [UIColor.clearColor().CGColor, UIColor(red: 225/255, green: 225/255, blue: 225/255, alpha: 0.5).CGColor]
//
// self.viewBlack.layer.insertSublayer(gradient, atIndex: 0)
self.tableView?.tableFooterView = UIView(frame: CGRectZero)
self.tableViewTwo?.tableFooterView = UIView(frame: CGRectZero)
self.tableHeight?.constant = 38*5
self.tableViewTwo?.scrollEnabled = false
}
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(true)
UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.Default
if let navigationBar = navigationController?.navigationBar {
navigationBar.barTintColor = UIColor.whiteColor()
navigationBar.translucent = false
if let font = UIFont(name: "HelveticaNeue-Light", size: 20.0) {
let navBarAttributesDictionary : [String : AnyObject]? = [
NSForegroundColorAttributeName: UIColor(red: 235/255, green: 67/255, blue: 27/255, alpha: 1.0),
NSFontAttributeName: font
]
navigationBar.titleTextAttributes = navBarAttributesDictionary
UIBarButtonItem.appearance().setTitleTextAttributes(navBarAttributesDictionary, forState: .Normal)
}
}
let editButton = UIBarButtonItem(title: "Modifier", style: .Plain, target: self, action: #selector(bienController.modifier))
self.navigationItem.rightBarButtonItem = editButton
}
func modifier(){
//do something
}
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if tableView == self.tableView {
return 3
} else {
return 5
}
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
if tableView == self.tableView {
if indexPath.row == 0 {
var cell = tableView.dequeueReusableCellWithIdentifier("oneCell") as! listCommandeCellTwo!
if cell == nil {
cell = listCommandeCellTwo(style: UITableViewCellStyle.Default, reuseIdentifier: "oneCell")
}
cell.descriptionLabel.text = "description"
cell.titre.text = "titre"
return cell
} else if indexPath.row == 1 && self.imageNb < 3 {
var cell = tableView.dequeueReusableCellWithIdentifier("bienImgCell") as! bienImgCell!
if cell == nil {
cell = bienImgCell(style: UITableViewCellStyle.Default, reuseIdentifier: "bienImgCell")
}
cell.imageOne.image = UIImage(named: "maison")
cell.imageTwo.image = UIImage(named: "maison")
cell.imageOne.contentMode = .ScaleAspectFill
cell.imageTwo.contentMode = .ScaleAspectFill
return cell
} else if indexPath.row == 1 && self.imageNb >= 3 {
var cell = tableView.dequeueReusableCellWithIdentifier("photoCategoryCell") as! photoCategoryCell!
if cell == nil {
cell = photoCategoryCell(style: UITableViewCellStyle.Default, reuseIdentifier: "photoCategoryCell")
}
cell.imageList.removeAll(keepCapacity: false)
for i in 0...10 {
cell.imageList.append(UIImage(named: "maison")!)
}
cell.collectionView.delegate = cell
cell.collectionView.dataSource = cell
return cell
} else {
var cell = tableView.dequeueReusableCellWithIdentifier("bienCellOne") as! bienCellOne!
if cell == nil {
cell = bienCellOne(style: UITableViewCellStyle.Default, reuseIdentifier: "bienCellOne")
}
cell.commentaire.delegate = cell
cell.commentaire.editable = false
cell.commentaire.setContentOffset(CGPointZero, animated: false)
cell.commentaire.text = "Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Nam liber te conscient to factor tum poen legum odioque civiuda."
return cell
}
} else {
var cell = tableView.dequeueReusableCellWithIdentifier("Cell") as! bienCellTwo!
if cell == nil {
cell = bienCellTwo(style: UITableViewCellStyle.Default, reuseIdentifier: "Cell")
}
cell.titre.text = self.onglet[indexPath.row]
cell.imageCategory.image = UIImage(named: "validate")
cell.imageCategory.contentMode = .ScaleAspectFit
if indexPath.row == 0 {
cell.backgroundColor = UIColor(red: 235/255, green: 67/255, blue: 27/255, alpha: 1.0)
cell.tintColor = UIColor.whiteColor()
cell.titre.textColor = UIColor.whiteColor()
let checkImage = UIImage(named: "chevron")
let checkmark = UIImageView(image: checkImage)
cell.accessoryView = checkmark
cell.addBottomBorderWithColor(UIColor(red: 235/255, green: 67/255, blue: 27/255, alpha: 1.0), width: 1.0)
} else {
cell.addBottomBorderWithColor(UIColor(red: 225/255, green: 225/255, blue: 225/255, alpha: 1.0), width: 1.0)
cell.backgroundColor = UIColor.whiteColor()
cell.titre.textColor = UIColor(red: 235/255, green: 67/255, blue: 27/255, alpha: 1.0)
let checkImage = UIImage(named: "chevron-orange")
let checkmark = UIImageView(image: checkImage)
cell.accessoryView = checkmark
}
return cell
}
}
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
//if tableView == self.tableViewTwo {
print(indexPath.row)
self.boo(indexPath.row)
// self.segue()
// self.performSegueWithIdentifier("image", sender: nil)
//}
}
func boo(sender:Int){
print(sender)
let storyboard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let vc:UIViewController = storyboard.instantiateViewControllerWithIdentifier("extend") as! extendController
let backItem = UIBarButtonItem()
backItem.title = ""
navigationItem.backBarButtonItem = backItem
self.showViewController(vc as UIViewController, sender: nil)
//self.segue()
}
func segue(){
// self.performSegueWithIdentifier("image", sender: nil)
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "image" {
let backItem = UIBarButtonItem()
backItem.title = ""
navigationItem.backBarButtonItem = backItem
let extendView = segue.destinationViewController as! extendController
extendView.image = UIImage(named: "maison")
}
}
}
最佳答案
在第一种情况下,问题出在这一行:
bienController().performSegueWithIdentifier("extend", sender: sender.tag)
使用标准 init
方法创建 bienController
类的新实例。因此,它不了解 Storyboard,因此无法找到转场。
第二种情况更难确定(您没有显示如何从 collectionViewCell 中的按钮调用 clickExtend
方法),但我怀疑它有同样的问题。
在最后一种情况下,您将再次创建 bienController
的新实例。因为您现在使用 showViewController
,所以没有 segue 的问题 - 所以没有错误 - 但新实例不在屏幕上,所以 showViewController
什么都不做(至少,它不会在屏幕上显示任何内容)。
您需要您的 Collection View 单元格引用 bienViewController
的现有实例。我需要查看更多您的设置以准确展示如何执行此操作,但同时您应该检查 this question和答案。
在这种情况下,您需要您的 photoCategoryCell
能够在您的现有 bienController
View Controller 上调用方法。在 photoCategoryCell
中,定义一个协议(protocol)来指示它期望调用的方法:
protocol PhotoCategoryCellDelegateProtocol {
func didTapExtendInPhotoCollectionViewCellWithIndex(index: Int, inPhotoCategoryCell: photoCategoryCell)
}
然后将 delegate
属性添加到具有此类型的 photoCategoryCell
:
var delegate : PhotoCategoryCellDelegateProtocol?
并且在 extendFunc
方法中,将 bienController().boo(sender.tag)
替换为调用:
self.delegate?.didTapExtendInPhotoCollectionViewCellWithIndex(sender.tag, inPhotoCategoryCell: self)
在 bienController
类中,实现这个新功能:
func didTapExtendInPhotoCollectionViewCellWithIndex(index: Int, inPhotoCategoryCell: photoCategoryCell) {
self.boo(index) // or use performSegue if you prefer
}
修改bienController
的类定义,表明它采用这个协议(protocol):
class bienController : UIViewController, UITableViewDelegate, UITableViewDataSource, PhotoCategoryCellDelegateProtocol { ...
在 cellForRowAtIndexPath
中,确保将 photoCategoryCell
的 delegate
属性设置为 self:
...
} else if indexPath.row == 1 && self.imageNb >= 3 {
var cell = tableView.dequeueReusableCellWithIdentifier("photoCategoryCell") as! photoCategoryCell!
if cell == nil {
cell = photoCategoryCell(style: UITableViewCellStyle.Default, reuseIdentifier: "photoCategoryCell")
}
cell.imageList.removeAll(keepCapacity: false)
for i in 0...10 {
cell.imageList.append(UIImage(named: "maison")!)
}
// set the cell's delegate...
cell.delegate = self
cell.collectionView.delegate = cell
cell.collectionView.dataSource = cell
return cell
} else ...
请注意,我已经定义了协议(protocol)方法来传递 Collection View 单元格索引和表格 View 单元格:所以如果您有多个带有 Collection View 的表格 View 行,您可以确定正确的电视行。
作为最后的风格说明,类名以大写字母开头是惯例;我现在会养成这种习惯,所以将 bienController
修改为 BienController
,等等。
关于swift - 单击 TableViewCell 中 collectionView 的 uicollectionViewCell 中的按钮时显示新的 View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37234795/
我的Angular-Component位于一个flexbox(id =“log”)中。可以显示或隐藏flexbox。 我的组件内部有一个可滚动区域,用于显示日志消息。 (id =“message-li
我真的很困惑 有一个 phpinfo() 输出: MySQL 支持 启用 客户端 API 版本 5.5.40 MYSQL_MODULE_TYPE 外部 phpMyAdmin 显示: 服务器类型:Mar
我正在研究这个 fiddle : http://jsfiddle.net/cED6c/7/我想让按钮文本在单击时发生变化,我尝试使用以下代码: 但是,它不起作用。我应该如何实现这个?任何帮助都会很棒
我应该在“dogs_cats”中保存表“dogs”和“cats”各自的ID,当看到数据时显示狗和猫的名字。 我有这三个表: CREATE TABLE IF NOT EXISTS cats ( id
我有一个字符串返回到我的 View 之一,如下所示: $text = 'Lorem ipsum dolor ' 我正在尝试用 Blade 显示它: {{$text}} 但是,输出是原始字符串而不是渲染
我无法让我的链接(由图像表示,位于页面左侧)真正有效地显示一个 div(包含一个句子,位于中间)/单击链接时隐藏。 这是我的代码: Practice
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 4 年前。 Improve this ques
最初我使用 Listview 来显示 oracle 结果,但是最近我不得不切换到 datagridview 来处理比 Listview 允许的更多的结果。然而,自从切换到数据网格后,我得到的结果越来越
我一直在尝试插入一个 Unicode 字符 ∇ 或 ▽,所以它显示在 Apache FOP 生成的 PDF 中。 这是我到目前为止所做的: 根据这个基本帮助 Apache XSL-FO Input,您
我正在使用 node v0.12.7 编写一个 nodeJS 应用程序。 我正在使用 pm2 v0.14.7 运行我的 nodejs 应用程序。 我的应用程序似乎有内存泄漏,因为它从我启动时的大约 1
好的,所以我有一些 jQuery 代码,如果从下拉菜单中选择了带有前缀 Blue 的项目,它会显示一个输入框。 代码: $(function() { $('#text1').hide();
当我试图检查 Chrome 中的 html 元素时,它显示的是 LESS 文件,而 Firefox 显示的是 CSS 文件。 (我正在使用 Bootstrap 框架) 如何在 Chrome 中查看 c
我是 Microsoft Bot Framework 的新手,我正在通过 youtube 视频 https://youtu.be/ynG6Muox81o 学习它并在 Ubuntu 上使用 python
我正在尝试转换从 mssql 生成的文件到 utf-8。当我打开他的输出 mssql在 Windows Server 2003 中使用 notepad++ 将文件识别为 UCS-2LE我使用 file
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我正在尝试执行单击以打开/关闭一个 div 的功能。 这是基本的,但是,点击只显示 div,当我点击“关闭”时,没有任何反应。 $(".inscricao-email").click(function
假设我有 2 张卡片,屏幕上一次显示一张。我有一个按钮可以用其他卡片替换当前卡片。现在假设卡 1 上有一些数据,卡 2 上有一些数据,我不想破坏它们每个上的数据,或者我不想再次重建它们中的任何一个。
我正在使用 Eloquent Javascript 学习 Javascript。 我在 Firefox 控制台上编写了以下代码,但它返回:“ReferenceError:show() 未定义”为什么?
我正在使用 Symfony2 开发一个 web 项目,我使用 Sonata Admin 作为管理面板,一切正常,但我想要做的是,在 Sonata Admin 的仪表板菜单上,我需要显示隐藏一些菜单取决
我试图显示一个div,具体取决于从下拉列表中选择的内容。例如,如果用户从列表中选择“现金”显示现金div或用户从列表中选择“检查”显示现金div 我整理了样本,但样本不完整,需要接线 http://j
我是一名优秀的程序员,十分优秀!