Swift 错误转换点(CGPoint,到:UITableView)
Swift Error convertPoint(CGPoint, to: UITableView)
所以我有一个自定义 tableview
并且在该表视图中我有一个按钮、一个图像和 2 个标签。这些项目中的每一项都使用 php 来自 mysql 服务器的 json 数据填充。我将我的项目从 Objective-C 转换为 Swift 并在这样做时出现此错误。这是我项目中最重要的代码之一,因为由于用户单击了跟随按钮,它会将数组移动到其他数组,并在这样做时为单元格提供一个特殊的行号,以便所有图像、标签和按钮知道该显示哪个。
我尝试将其切换为 .convert()
但只是出错,所以我保留了它的原始状态。
按钮代码
// Follow Button
@IBAction func followButtonClick(_ sender: Any) {
// Adding row to tag
var buttonPosition = (sender as AnyObject).convertPoint(CGPoint.zero, to: self.myTableView)
var indexPath = self.myTableView.indexPathForRow(at: buttonPosition)!
// Creating an action per tag
if indexPath != nil {
// Showing Status Labels
var cell = self.myTableView.cellForRow(atIndexPath: indexPath)!
cell.firstStatusLabel.isHidden = false
cell.secondStatusLabel.isHidden = false
// Change Follow to Following
(sender as AnyObject).setImage(UIImage(named: "follow.png")!, for: .normal)
cell.followButton.isHidden = true
cell.followedButton.isHidden = false
self.myTableView.beginUpdates()
// ----- Inserting Cell to Section 0 -----
followedArray.insert(testArray[indexPath.row], at: 0)
myTableView.insertRows(at: [IndexPath(row: 0, section: 0)], with: .fade)
// ----- Removing Cell from Section 1 -----
testArray.remove(at: indexPath.row)
var rowToRemove = indexPath.row
self.myTableView.deleteRows(at: [IndexPath(row: rowToRemove, section: 1)], with: true)
self.myTableView.endUpdates()
}
}
错误
新代码错误
图片方便阅读
convertPoint
在 Swift 3 中更改为 convert(_:to:)
。
var buttonPosition = (sender as AnyObject).convert(CGPoint.zero, to: self.myTableView)
查看 Apple Documentation 了解更多详情。
编辑:
对于您的第一个警告而不是 usinf indexPath != nil
,您需要使用 if let
并且对于该标签错误,您需要将您的单元格转换为您正在使用的 customCell。
var buttonPosition = (sender as AnyObject).convert(CGPoint.zero, to: self.myTableView)
if let indexPath = self.tblSubscriber.indexPathForRow(at: buttonPosition) {
//Cast your `UITableViewCell` to CustomCell that you have used
var cell = self.myTableView.cellForRow(atIndexPath: indexPath) as! CustomCell
}
对于 deleteRows
错误,您需要指定 UITableViewRowAnimation
而不是 true
或 false
。
self.myTableView.deleteRows(at: [IndexPath(row: rowToRemove, section: 1)], with: .automatic)
有关 UITableViewRowAnimation
的更多详细信息,请查看文档。
如果您在 swift3 中尝试此代码,则上述方法将更新为
func convert(_ point: CGPoint,
从视图:UIView?) -> CGPoint 你可以像这样使用它
var buttonPosition = (sender as AnyObject).convert(CGPoint.zero, to: self.myTableView)
我已经在 Playground 中检查过了,它正在运行。
所以我有一个自定义 tableview
并且在该表视图中我有一个按钮、一个图像和 2 个标签。这些项目中的每一项都使用 php 来自 mysql 服务器的 json 数据填充。我将我的项目从 Objective-C 转换为 Swift 并在这样做时出现此错误。这是我项目中最重要的代码之一,因为由于用户单击了跟随按钮,它会将数组移动到其他数组,并在这样做时为单元格提供一个特殊的行号,以便所有图像、标签和按钮知道该显示哪个。
我尝试将其切换为 .convert()
但只是出错,所以我保留了它的原始状态。
按钮代码
// Follow Button
@IBAction func followButtonClick(_ sender: Any) {
// Adding row to tag
var buttonPosition = (sender as AnyObject).convertPoint(CGPoint.zero, to: self.myTableView)
var indexPath = self.myTableView.indexPathForRow(at: buttonPosition)!
// Creating an action per tag
if indexPath != nil {
// Showing Status Labels
var cell = self.myTableView.cellForRow(atIndexPath: indexPath)!
cell.firstStatusLabel.isHidden = false
cell.secondStatusLabel.isHidden = false
// Change Follow to Following
(sender as AnyObject).setImage(UIImage(named: "follow.png")!, for: .normal)
cell.followButton.isHidden = true
cell.followedButton.isHidden = false
self.myTableView.beginUpdates()
// ----- Inserting Cell to Section 0 -----
followedArray.insert(testArray[indexPath.row], at: 0)
myTableView.insertRows(at: [IndexPath(row: 0, section: 0)], with: .fade)
// ----- Removing Cell from Section 1 -----
testArray.remove(at: indexPath.row)
var rowToRemove = indexPath.row
self.myTableView.deleteRows(at: [IndexPath(row: rowToRemove, section: 1)], with: true)
self.myTableView.endUpdates()
}
}
错误
新代码错误
图片方便阅读
convertPoint
在 Swift 3 中更改为 convert(_:to:)
。
var buttonPosition = (sender as AnyObject).convert(CGPoint.zero, to: self.myTableView)
查看 Apple Documentation 了解更多详情。
编辑:
对于您的第一个警告而不是 usinf indexPath != nil
,您需要使用 if let
并且对于该标签错误,您需要将您的单元格转换为您正在使用的 customCell。
var buttonPosition = (sender as AnyObject).convert(CGPoint.zero, to: self.myTableView)
if let indexPath = self.tblSubscriber.indexPathForRow(at: buttonPosition) {
//Cast your `UITableViewCell` to CustomCell that you have used
var cell = self.myTableView.cellForRow(atIndexPath: indexPath) as! CustomCell
}
对于 deleteRows
错误,您需要指定 UITableViewRowAnimation
而不是 true
或 false
。
self.myTableView.deleteRows(at: [IndexPath(row: rowToRemove, section: 1)], with: .automatic)
有关 UITableViewRowAnimation
的更多详细信息,请查看文档。
如果您在 swift3 中尝试此代码,则上述方法将更新为 func convert(_ point: CGPoint, 从视图:UIView?) -> CGPoint 你可以像这样使用它
var buttonPosition = (sender as AnyObject).convert(CGPoint.zero, to: self.myTableView)
我已经在 Playground 中检查过了,它正在运行。