Swift 3
//
// ViewController.swift
// test
//
// Created by David Seek on 9/29/16.
// Copyright © 2016 David Seek. All rights reserved.
//
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let button = MyButton(frame: CGRect(x: 200, y: 200, width: 100, height: 100))
button.backgroundColor = UIColor.white
button.addedTouchArea = 50 // any value you want
button.addTarget(self, action:#selector(self.action), for: .touchUpInside)
self.view.addSubview(button)
}
func action() {
print("touched")
}
}
class MyButton: UIButton {
var addedTouchArea = CGFloat(0)
override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {
let newBound = CGRect(
x: self.bounds.origin.x - addedTouchArea,
y: self.bounds.origin.y - addedTouchArea,
width: self.bounds.width + 2 * addedTouchArea,
height: self.bounds.width + 2 * addedTouchArea
)
return newBound.contains(point)
}
}
Вы создаете UIButton
размером 100x100, и с .addedTouchArea
, у вас есть UIButton - еще оптический размер 100x100, но с сенсорным площадью 150x150 ,
Swift 2.X
class MyButton: UIButton {
var addedTouchArea = CGFloat(0)
override func pointInside(point: CGPoint, withEvent event: UIEvent?) -> Bool {
let newBound = CGRect(
x: self.bounds.origin.x - addedTouchArea,
y: self.bounds.origin.y - addedTouchArea,
width: self.bounds.width + 2 * addedTouchArea,
height: self.bounds.width + 2 * addedTouchArea
)
return newBound.contains(point)
}
}
InterfaceBuilder
Если вы сделали установить кнопку с InterfaceBuilder
, применить наш подкласс UIButton
к кнопке.
Затем установите выход на кнопку, F.E. named buttonXY. И установите buttonXY.addedTouchArea = 50
в пределах viewDidLoad
, f.e.
UITableViewCell
Поскольку вы просите UITableViewCell
. Он работает точно так же.
В вашем ViewController классе:
extension ViewController: UITableViewDelegate, UITableViewDataSource {
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "tableViewCell") as! TableViewCell
cell.selectionStyle = UITableViewCellSelectionStyle.none
cell.myButton.addedTouchArea = 50 // any value you want
tableView.rowHeight = 200
return cell
}
}
В классе Cell:
Единственное, что вы должны остерегаться: Выпускной был установлен как UIButton
розетку, даже Тхо я объявил это как подкласс MyButton в пределах InterfaceBuilder
. Мне пришлось вручную менять розетку до MyButton
!@IBOutlet weak var myButton: MyButton!
увеличить ширину/высоту кнопки, если нет проблем. Каковы другие подвид ячейки? –