DidSelectRow 不工作
Posted
技术标签:
【中文标题】DidSelectRow 不工作【英文标题】:DidSelectRow is not working 【发布时间】:2018-03-05 04:40:12 【问题描述】:标题几乎是这样的:DidSelectRow
没有被调用,我确实检查了我没有使用Deselect
。我还检查了delegate
和DataSource
是否连接到tableViewController
和Selection
是Single Selection
。但是,该方法仍然没有被调用。
空的tableView
可能对它有任何影响(它是空的原因是因为用户开始填充它。我正在使用CoreData
)?
编辑
这个方法是这样的:
var effectView = UIVisualEffectView(effect: UIBlurEffect(style: .light))
var effect: UIVisualEffect!
let defaults = UserDefaults.standard
var userMagazineTitle = [User]()
var dataString = String()
override func viewDidLoad()
super.viewDidLoad()
addProgrammatically()
let fetchRequest: NSFetchRequest<User> = User.fetchRequest()
do
let users = try PresistanceService.context.fetch(fetchRequest)
self.userMagazineTitle = users
self.tableView.reloadData()
catch
ProgressHUD.showError("Nothing to see here")
/ MARK: - Table view data source
override func numberOfSections(in tableView: UITableView) -> Int
// #warning Incomplete implementation, return the number of sections
return 1
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
// #warning Incomplete implementation, return the number of rows
return userMagazineTitle.count
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: "myCell", for: indexPath) as! MyFeedTableViewCell
cell.myHeadline?.text = userMagazineTitle[indexPath.row].title
cell.indentationLevel = 3
return cell
// Override to support editing the table view.
override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath)
let manage = PresistanceService.persistentContainer.viewContext
let del = userMagazineTitle[indexPath.row]
if editingStyle == .delete
// Delete the row from the data source
manage.delete(del)
do
try manage.save()
catch
ProgressHUD.showError()
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "User")
do
userMagazineTitle = try manage.fetch(fetchRequest) as! [User]
catch
ProgressHUD.showError()
tableView.reloadData()
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
self.performSegue(withIdentifier: "showUser", sender: indexPath)
navigationController?.navigationBar.isHidden = false
tableView.deselectRow(at: indexPath, animated: true)
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
if segue.identifier == "showUser"
let DestViewController = segue.destination as! UINavigationController
let targetController = DestViewController.topViewController as! CompanyTableViewController
let indexPath = sender as! IndexPath
let user = userMagazineTitle[indexPath.row].title
let user2 = userMagazineTitle[indexPath.row].rssurl
targetController.customUserInit(articlesindex: indexPath.row, title: user!, rssUrl: user2!)
func addProgrammatically()
effectView.frame = view.bounds
tableView.addSubview(effectView)
effectView.translatesAutoresizingMaskIntoConstraints = false
if #available(ios 11.0, *)
effectView.topAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.topAnchor, constant: 0).isActive = true
else
// Fallback on earlier versions
effectView.topAnchor.constraint(equalTo: self.view.topAnchor, constant: 0).isActive = true
effectView.heightAnchor.constraint(equalTo: self.view.heightAnchor).isActive = true
effectView.widthAnchor.constraint(equalTo: self.view.widthAnchor).isActive = true
effect = effectView.effect
effectView.effect = nil
self.tableView.separatorStyle = .none
tableView.backgroundView = UIImageView(image: UIImage(named: "myMagazines.jpg"))
tableView.backgroundView?.contentMode = .scaleAspectFill
tableView.clipsToBounds = true
navigationController?.navigationBar.isHidden = false
UIApplication.shared.statusBarStyle = .lightContent
navigationController?.navigationBar.isTranslucent = false
navigationController?.navigationBar.barStyle = .black
navigationController?.navigationBar.tintColor = .white
navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]
【问题讨论】:
如果没有行那么你怎么能选择呢?(正如你提到的那张桌子是空的)。 @SaurabhPrajapati 它开始是空的,直到用户填充 TableView 能否添加cellForRow的代码? @SaurabhPrajapati 查看编辑 你能滚动tableview吗?检查表视图超级视图的剪辑子视图(剪辑到边界)。如果在将此属性设置为 true 后 tableview 不可见,那么它是您的视图框架的问题。 【参考方案1】:可能导致问题的另一件事是未选择选择类型。我浪费了两个小时来解决这个问题。
交叉检查单元格选择,如果未选中则将其更改为单选。 以编程方式执行此操作:
斯威夫特:tableView.allowsSelection = YES;
目标 C:[tableView allowsSelection : YES];
================================
这可能对某人有帮助!
【讨论】:
【参考方案2】:您在 tableview 顶部添加了一个UIVisualEffectView
视图,它不会将触摸事件传递给 tableview。
设置effectView.isUserInteractionEnabled = false
,应该让这个视图将触摸事件传递给下面的视图。
【讨论】:
【参考方案3】:这个问题可能有两个问题:
TableView DidSelectRow 的方法签名可能有误。当前签名是:
斯威夫特:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
ObjectiveC:-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
您在代码中的某处将 TableView 的委托设置为 nil。
【讨论】:
我检查了方法和委托,我还删除了旧的 TableViewController 并添加了另一个 tableViewController。以上是关于DidSelectRow 不工作的主要内容,如果未能解决你的问题,请参考以下文章
UITableView 的 didSelectRow 方法不起作用[重复]
UIPickerView - 第一行选择不调用 didSelectRow