Если вы хотите сделать это целиком из кода:
import UIKit
struct MatchInfo {
var teamA: String
var teamB: String
}
class ViewController: UIViewController, UITableViewDataSource {
@IBOutlet weak var tableView: UITableView!
var matches = [MatchInfo]()
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.dataSource = self
// Add some data
matches.append(MatchInfo(teamA: "Panthers", teamB: "Broncos"))
matches.append(MatchInfo(teamA: "Bucaneers", teamB: "Falcons"))
matches.append(MatchInfo(teamA: "Vikings", teamB: "Titans"))
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
// MARK: -
// MARK: Table View Data Source Delegate
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return matches.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("myCell") ?? makeCell()
let textFieldA = cell.viewWithTag(1) as! UITextField
let textFieldB = cell.viewWithTag(2) as! UITextField
let row = indexPath.row
textFieldA.text = matches[row].teamA
textFieldB.text = matches[row].teamB
return cell
}
func makeCell() -> UITableViewCell {
let textFieldA = UITextField(frame: CGRectZero)
let textfieldB = UITextField(frame: CGRectZero)
textFieldA.tag = 1
textfieldB.tag = 2
[textFieldA, textfieldB].forEach {
$0.translatesAutoresizingMaskIntoConstraints = false
$0.borderStyle = .RoundedRect
}
let vsLabel = UILabel(frame: CGRectZero)
vsLabel.text = "vs."
vsLabel.translatesAutoresizingMaskIntoConstraints = false
let cell = UITableViewCell(style: .Default, reuseIdentifier: "myCell")
[textFieldA, textfieldB, vsLabel].forEach { cell.contentView.addSubview($0) }
// Layout the elements
let views = ["A": textFieldA, "B": textfieldB, "vs": vsLabel]
let c1 = NSLayoutConstraint.constraintsWithVisualFormat("H:[A]-8-[vs]-8-[B]", options: .AlignAllBaseline, metrics: nil, views: views)
let c2 = NSLayoutConstraint(item: textFieldA, attribute: .Left, relatedBy: .Equal, toItem: cell.layoutMarginsGuide, attribute: .Left, multiplier: 1, constant: 0)
let c3 = NSLayoutConstraint(item: textfieldB, attribute: .Right, relatedBy: .Equal, toItem: cell, attribute: .Right, multiplier: 1, constant: 0)
let c4 = NSLayoutConstraint(item: textFieldA, attribute: .CenterY, relatedBy: .Equal, toItem: cell.contentView, attribute: .CenterY, multiplier: 1, constant: 0)
let c5 = NSLayoutConstraint(item: textFieldA, attribute: .Width, relatedBy: .Equal, toItem: textfieldB, attribute: .Width, multiplier: 1, constant: 0)
NSLayoutConstraint.activateConstraints(c1 + [c2, c3, c4, c5])
return cell
}
}
Результат:
Вы должны использовать массив. Это сохранит x
и y
как:
var coordinates = [0, 0];
coordinates = d3.mouse(this);
var x = coordinates[0];
var y = coordinates[1];
// D3 v4
var x = d3.event.pageX - document.getElementById(<id-of-your-svg>).getBoundingClientRect().x + 10
var y = d3.event.pageY - document.getElementById(<id-of-your-svg>).getBoundingClientRect().y + 10
V3:
var svg = d3.select('body').append('svg')
.attr('width', width)
.attr('height', height)
.on('mousemove', function() {
console.log( d3.mouse(this) ) // log the mouse x,y position
});
V4:
var svg = d3.select('body').append('svg')
.attr('width', width)
.attr('height', height)
.on('mousemove', function() {
console.log( d3.event.clientX, d3.event.clientY ) // log the mouse x,y position
});
Я подозреваю, что вы можете попробовать что-то вроде:
var x = 0;
svg.on('mousemove', function () {
x = d3.mouse(this)[0];
});
console.log(x);
Если у вас нет супер быстрых рук, это всегда будет писать «0» на консоль, потому что весь скрипт выполняется, пока вы достигаете мышь. Попробуйте поместить свой фрагмент непосредственно в консоль, передвиньте мышь и введите «x» в консоль. Вы должны увидеть последнее значение x.
Надеюсь, это поможет, но я, возможно, неправильно понял этот вопрос.
Вы очень хорошо понимаете функцию щелчка и перетаскивания в этом примере. Надеюсь, что это поможет.
var point = d3.mouse(this)
, p = {x: point[0], y: point[1] };