You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

tvOS 17更新后UITableView的didSelectRowAt失效问题求助

tvOS 17更新后UITableView的didSelectRowAt方法无法触发

更新tvOS 17后,我的UITableView的didSelectRowAt方法不再触发。选中表格单元格时,该方法不会被调用,焦点反而会转移到其他位置。

已尝试的排查步骤

  • 设置table_view.dataSource = self
  • 设置table_view.delegate = self
  • 开启table_view.allowsSelection = true
  • 将所有UITapGestureRecognizer的cancelsTouchesInView设为false,甚至移除所有手势仍无效
  • 确保表格、单元格及内部内容均开启User Interaction Enabled
  • 尝试注释表格和单元格的pressesBegan方法,无效果后恢复

表格视图代码(已省略部分内容)

@IBDesignable
class channel_list_view: UIView, UITableViewDelegate, UITableViewDataSource, slice_view_event_receiver, channel_list_table_cell_event_receiver {
    @IBOutlet weak var channel_list_table_view: UITableView!
    var view: UIView!

    override init(frame: CGRect) {
        super.init(frame: frame)
        common_init()
    }
    
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        common_init()
    }

    func common_init() {
        view = load_view_from_nib()
        view.frame = bounds
        addSubview(view)
    
        channel_list_table_view.allowsSelection = true
        

        channel_list_table_view.register(UINib(nibName: "channel_list_table_cell", bundle: nil), forCellReuseIdentifier: "channel_list_table_cell")
                 

        channel_list_table_view.dataSource = self
        channel_list_table_view.delegate = self
        
        channel_list_table_view.remembersLastFocusedIndexPath = true

        let left_swipe_recogniser = UISwipeGestureRecognizer(target: self, action: #selector(swipe_gesture_occurred))
        left_swipe_recogniser.direction = .left
        view.addGestureRecognizer(left_swipe_recogniser)
    }
  
    override func pressesBegan(_ presses: Set<UIPress>, with event: UIPressesEvent?) {
        // Code here gets called
        for press in presses {
            if press.type == .leftArrow {
                event_receiver?.leave_channel_list(selected_guide_item: nil)
                return
            }
        }
        
        super.pressesBegan(presses, with: event)
    }

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        // NOT WORKING - Code here isn't getting called
    }
}

表格单元格代码(已省略部分内容)

@IBDesignable
class channel_list_table_cell: UITableViewCell  {
    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code

        layer.cornerRadius = ui_constants.corner_radius     

        listen_for_gestures()
    }

    func listen_for_gestures() {
        let swipe_recogniser = UISwipeGestureRecognizer(target: self, action: #selector(swipe_gesture_occurred))
        swipe_recogniser.direction = .right
        self.addGestureRecognizer(swipe_recogniser)
    }

    override func pressesBegan(_ presses: Set<UIPress>, with event: UIPressesEvent?) {
        for press in presses {
            if press.type == .rightArrow {
                event_receiver?.slice_open(cell: self)
                return
            }
        }
        
        super.pressesBegan(presses, with: event)
    }

    func ignore_gestures() {
        gestureRecognizers?.removeAll()
    }

    @objc func swipe_gesture_occurred(gesture: UIGestureRecognizer) {
        if let swipeGesture = gesture as? UISwipeGestureRecognizer {
            switch swipeGesture.direction {
            case .right:
                event_receiver?.slice_open(cell: self)
            default:
                break
            }
        }
    }
}

表格单元格包含的视图代码(供参考)

@IBDesignable
class channel_view: UIView {
    @IBOutlet weak var programme_image: UIImageView!
    @IBOutlet weak var channel_image: UIImageView!
    @IBOutlet weak var programme_title: marquee_view!
    @IBOutlet weak var channel_name: marquee_view!
    @IBOutlet weak var channel_number: UILabel!
    @IBOutlet weak var progress: progress_line_view!
    @IBOutlet weak var slice_arrow: UILabel!

    // A bunch of setters and getters...
    override init(frame: CGRect) {
        super.init(frame: frame)
        common_init()
    }
    
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        common_init()
    }

    func common_init() {
        view = load_view_from_nib()
        view.frame = bounds
        addSubview(view)
                
        programme_title.backgroundColor = UIColor.init(hex: UInt32(0x324a6eff))
        programme_title.font_colour = UIColor.white

        channel_name.backgroundColor = UIColor.init(hex: UInt32(0x00000000))
        channel_name.font_colour = UIColor.white
        
        channel_number.textColor = UIColor.white

    }
}

内容的提问来源于stack exchange,提问作者Alexander Le

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 19:02:06