我有一个自定义UITableViewCell
,我有一个Label
,需要根据特定条件进行点击。所以我在其上添加了TapGestureRecognizer
。我已经使用了协议和代理。我希望在点击此UILabel
时传递参数并执行segue。我能够执行此segue但无法检测到哪个单元格的标签。
我是新手,已经被困了几个小时。任何帮助,将不胜感激。还请告诉我是否有另一种更简单的方法来获得相同的结果。
如果它是一个按钮我可以添加一个目标,但我现在真的被卡住了。
答案 0 :(得分:4)
正如@KrishnaCA在回答中所说,如果你想让整个标签可点击,那么使用按钮可能会更好。如果您需要它看起来与按钮不同,您还可以在标签上放置一个透明按钮(没有图像的自定义样式)。
无论您使用按钮还是标签+点按手势识别器,您仍需要确定用户点击的indexPath。你可以像Hamid建议的那样在按钮/标签上加一个标签,但这很脆弱。我更喜欢不同的方式。我已经为UITableView编写了一个扩展,可以让你找出哪个单元拥有给定的视图:
using DotNetBrowser;
using DotNetBrowser.Events;
using System;
using System.Threading;
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
using (var browser = BrowserFactory.Create())
{
ManualResetEvent waitEvent = new ManualResetEvent(false);
browser.FinishLoadingFrameEvent += delegate(object sender, FinishLoadingEventArgs e)
{
// Wait until main document of the web page is loaded completely.
if (e.IsMainFrame)
{
waitEvent.Set();
}
};
browser.LoadURL("https://www.teamdev.com/dotnetbrowser");
waitEvent.WaitOne();
PrintPDF(browser, System.IO.Path.GetFullPath(@"test.pdf"));
}
}
public static void PrintPDF(Browser browser, string sFileName) {
ManualResetEvent waitEvent = new ManualResetEvent(false);
var handler = new MyPDFPrintHandler((printJob) => {
var printSettings = printJob.PrintSettings;
printSettings.PrintToPDF = true;
printSettings.PDFFilePath = sFileName;
printJob.PrintJobEvent += (s, e) =>
{
System.Diagnostics.Debug.WriteLine("Printing done: " + e.Success);
waitEvent.Set();
};
return printSettings;
});
browser.PrintHandler = handler;
browser.Print();
waitEvent.WaitOne();
}
class MyPDFPrintHandler : PrintHandler
{
Func<PrintJob, PrintSettings> func;
public MyPDFPrintHandler(Func<PrintJob, PrintSettings> func)
{
this.func = func;
}
public PrintStatus OnPrint(PrintJob printJob)
{
PrintSettings printSettings = func(printJob);
printSettings.PrintToPDF = true;
printSettings.Landscape = true;
printSettings.PrintBackgrounds = true;
return PrintStatus.CONTINUE;
}
}
}
}
如果您将该扩展程序添加到项目中,则可以使用如下代码。
手势识别器:
public extension UITableView {
/// This method returns the indexPath of the cell that contains the specified view
/// - parameter view: The view to find.
/// - returns: The indexPath of the cell containing the view, or nil if it can't be found
func indexPathForView(_ view: UIView) -> IndexPath? {
let origin = view.bounds.origin
let viewOrigin = self.convert(origin, from: view)
let indexPath = self.indexPathForRow(at: viewOrigin)
return indexPath
}
}
或者,对于按钮操作:
@objc func alertClicked(sender: UIGestureRecognizer){
let view = sender.view
let indexPath = tableView.indexPathForView(view)
//Do whatever you need to do with the indexPath
}
答案 1 :(得分:0)
给每个单元格一个唯一的标签,然后:
updated_at
并将此函数添加到CustomCell类:
main()
{
short arr[] = {2,10,-15,20};
short size = 4;
bobbleSort<short, short*>(size, arr);
}
template<class FIRST_TYPE, class SECOND_TYPE>
void bobbleSort(FIRST_TYPE size, SECOND_TYPE arr)
{
arr[2]++;
}
答案 2 :(得分:0)
我个人更喜欢对TableViewCell进行子类化,并使用委托方法将抽头发送回TableView。您将需要在TableViewCell中提供并保存indexPath并使用委托方法将其传回,这在技术上打破了MVC,但个人代码更加清晰。如果您对此感兴趣,我可以发布代码。