[英]How to get location of UIButton in Tableview cell, and add target in Swift?
我想在Swift的TableviewCell上添加一個按鈕,以彈出一個小的自定義視圖(覆蓋當前視圖),其中包含一些在線信息。
我創建了另一個(“彈出式視圖”的ViewController +自定義視圖,並調整了它的大小。
在tableviewcell類中,在Button.AddTarget(..)相關函數中,我調用了PresentViewController(..) 。
我有這些問題:
如何在TableviewCell的屏幕窗口中獲取按鈕(或觸摸位置)的X,Y坐標 ?
我進行了搜索,但最相關的答案是關於TableviewController而不是TableviewCell。
================================================== ======
我努力了:
import UIKit
import QorumLogs
class TabelViewSearchStockCell: UITableViewCell, UIViewControllerTransitioningDelegate {
@IBOutlet weak var mainImageView: UIImageView!
@IBOutlet weak var productCodeLabel: UILabel!
@IBOutlet weak var titleLabel: UILabel!
@IBOutlet weak var stockButton: UIButton!
@IBOutlet weak var view: UIView!
var cellType:String?
var searchCell: SearchResult?
{
didSet{
// 1. set image
if let imageId = searchCell?.id_img{
let urlCovertor = GetImgUrl()
let urlStr = urlCovertor.getSmall(imageId)
let url = NSURL(string: urlStr)
mainImageView.sd_setImageWithURL(url)
}
// 2. set_title
titleLabel.text = searchCell?.title
// 3. set product code
productCodeLabel.text = searchCell?.productcode
// 4. set price area
stockButton.addTarget(self, action: #selector(TabelViewSearchStockCell.checkStock), forControlEvents: .TouchUpInside)
}
}
// MARK: - set location
private lazy var animatorManager: PresentationManager = {
let buttonRect = self.stockButton.superview?.convertRect(self.stockButton.frame, toView: self.view)
let manager = PresentationManager()
manager.presentFrame = buttonRect!
return manager
}()
}
// MARK:- Listen button
extension TabelViewSearchStockCell{
@objc private func checkStock(){
// create menu
let sb = UIStoryboard(name: "Popover",bundle: nil)
guard let menuView = sb.instantiateInitialViewController() else{
return
}
menuView.transitioningDelegate = animatorManager
menuView.modalPresentationStyle = UIModalPresentationStyle.Custom
self.window?.rootViewController?.presentViewController(menuView, animated: true, completion: nil)
}
}
它仍然總是出現在C1中
我想要單擊位置S1上的按鈕時,它將在位置C2而不是C1上顯示“彈出窗口”。 這意味着,popupview將始終顯示在我單擊的按鈕的正下方。
對於第一個問題,您可以在按鈕的超級視圖上調用convertRect
,超級視圖應該是表格視圖單元格的內容視圖。 如果您無法閱讀harpreet給出的代碼,則以下為快速翻譯:
let frame = yourButton.superview.convertRect(yourButton.frame, toView: self.view)
現在,此框架是按鈕相對於self.view
的框架。
對於第二個問題,您可以設置按鈕的tag
屬性,並在表視圖單元格的內容視圖上調用viewWithTag
來取回按鈕。
這是如何做:
如果您的單元格位於情節提要中,請選擇按鈕,然后在右側的屬性檢查器中將“標簽”設置為某個數字。 如果您通過代碼創建按鈕,則可以通過以下方式設置標簽
yourButton.tag = someNumber
然后,您只需要獲取表視圖單元格的contentView
並調用viewWithTag
:
let contentView = cell.contentView
let button = contentView.viewWithTag(someNumber)!
現在您可以添加目標了!
button.addTarget(...)
編輯:
如果您使用的是情節提要,則可以控制將按鈕拖到代碼中,然后創建一個動作。 小心! 不要意外添加插座! 請記住,首先在彈出窗口中將“插座”更改為“動作”!
您要做的是相對於self.view將UITableView中UITableViewCell中的按鈕的CGRect轉換為CGRect。
CGRect frame = [[youButton superview] convertRect: yourButton.frame toView: self.view];
您可以使用此框架的原點來播放彈出視圖的位置
您對“我如何推出特定值(id_item)”有什么含義? 在你的2nd
問題?
我建議您將按鈕目標添加到單元格之外(即:在控制器中cell for row
實現tableView的dataSource函數cell for row
時,請使用button.add target...
)。
然后,您可以照常做自己想做的事,祝您好運。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.