Это своего рода goofy, но у меня есть собственный tableViewCell, который имеет UIScrollView и pageControl. Все работает нормально, хотя я не могу понять, как отправить/передать «pageControll.currentPage», который обновляется в UITableViewCell для моего ViewImageViewController.Передача Int (число) из tableViewCell в новый ViewController
Я не использую «didSelectRowAtIndexPath». Каждая ячейка имеет независимую переменную scrollView и pageControl.
TableViewCell: Работает отлично
class FriendsFeedTableViewCell: UITableViewCell, UIScrollViewDelegate {
@IBOutlet weak var imageScrollView: UIScrollView!
@IBOutlet weak var pageControl: UIPageControl!
func scrollViewDidEndDecelerating(scrollView: UIScrollView) { //current page: works
let currentPage = (CGFloat(imageScrollView.contentOffset.x)/CGFloat(userImageView!.frame.size.width))
pageControl.currentPage = Int(currentPage)
}
}
Высота для Cell
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return 470
}
TableViewController:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell: FriendsFeedTableViewCell = tableView.dequeueReusableCellWithIdentifier("cell") as! FriendsFeedTableViewCell
//Grabbing array of images from master Image Array
//images array will vary 1-3: as of now
let images = masterImageArray[indexPath.row]
//ScrollView setup
let scrollView = cell.imageScrollView
scrollView.pagingEnabled = true
scrollView.scrollEnabled = true
scrollView.tag = indexPath.row
//setup the image array for scrollView
var imageViews = [UIImageView]()
imageViews.append(cell.imageView_1)
imageViews.append(cell.imageView_2)
imageViews.append(cell.imageView_3)
//hidding all ImageViews: will only show if needed
cell.imageView_1.hidden = true
cell.imageView_2.hidden = true
cell.imageView_3.hidden = true
//tells how many pages will be need
for var i = 0; i < images.count; i++ {
imageViews[i].image = images[i]
scrollView.contentSize = CGSize(width: 310 * (i + 1), height: 400)
cell.pageControl.numberOfPages = (i + 1) // tells how many pages
imageViews[i].hidden = false
}
//button: Tells which image in indexPath we want to view
cell.tapToViewButton.tag = indexPath.row
cell.tapToViewButton.addTarget(self, action: "buttonPressed:", forControlEvents: .TouchUpInside)
return cell
}
В моей TableViewViewController я использую кнопку, которая когда-то щелкнул он запускает preforemSegueWithIdentifier
func buttonPressed(sender: UIButton){
imageSenderTag = sender.tag
self.performSegueWithIdentifier("toViewImageVC", sender: self)
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if (segue.identifier == "toViewImageVC"){
let viewImageVC: ViewImageViewController = segue.destinationViewController as! ViewImageViewController
//moves [image] to next VC
viewImageVC.imageArrayToPass = masterImageArray[imageSenderTag]
//FIXME: need to pass "currentPage" (Int) to newViewController
}
}
Я не могу понять это. Я ищу, но каждый использует «didSelectRowAtIndexPath», который я не использую.
EDIT: ----------------
Я попытался включить как рекомендацию @ozgur и @Mundi, но это не сработало.
func buttonPressed(sender: UIButton){
self.performSegueWithIdentifier("toViewImageVC", sender: sender)
}
пытался: @ozgur рекомендация
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if (segue.identifier == "toViewImageVC") {
let viewImageVC: ViewImageViewController = segue.destinationViewController as! ViewImageViewController
viewImageVC.mainUserImageToPass = masterUserPicsArray[imageSenderTag]
viewImageVC.imageArrayToPass = masterImageArray[imageSenderTag]
if let button = sender as? UIButton {
let indexPath = NSIndexPath(forRow: button.tag, inSection: 0)
let cell = resultsTable.cellForRowAtIndexPath(indexPath)
//ERROR
***viewImageVC.pageNumber = cell!.pageControl.currentPage***
}
}
}
ОШИБКА: Значение типа "UITableViewCell" имеет ни один из членов '' PageControl
UITableViewCell, конечно, не имеет PageControl. почему это происходит? Это ссылка на информацию о ячейках, верно?
ПРОБОВАЛИ: @ рекомендации Мунди
let button = sender as! UIButton
let point = button.convertPoint(CGPointZero, toView: self.resultsTable)
let indexPath = self.resultsTable.indexPathForRowAtPoint(point)!
let idx = indexPath.row // use this for accessing your image view array
if (segue.identifier == "toViewImageVC") {
let viewImageVC: ViewImageViewController = segue.destinationViewController as! ViewImageViewController
viewImageVC.mainUserImageToPass = masterUserPicsArray[idx]
viewImageVC.pageNumber = (sender?.tag)! // EXIBIT: A
}
PageNumber, который отправляется в ViewImageViewController посылает indexPath.row клетки, а не текущая страница UIScrollView в indexPath.row
Какие клетки 'pageControl.currentPage' вы хотите, чтобы перейти к контроллеру вида назначения после того, как была нажата кнопка? – ozgur
Это зависит от того, какая ячейка пользователь просматривает в данный момент и хочет ее подробно просмотреть. Итак, pageControl.tag = indexPath.row – whereisleo
Подождите секунду, поэтому каждая ячейка имеет свой собственный pageControl, и только одна ячейка занимает весь экран за раз? Как вы устанавливаете свойство 'tag' кнопки? Можете ли вы показать нам весь свой код, чтобы лучше понять вашу логику? – ozgur