我的 tableView 中有一个 scrollView。我的 ScrollView 具有 pageEnabled = true ,其中 UIImage/UIImageView 从 1 到 3 不等。
我还有与当前页面关联的页面控件,该控件可以工作。我正在尝试关联我的 CurrentPage,以便将正确的图像发送到我的DetailViewController
这是我的以下代码:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell: FriendsFeedTableViewCell = tableView.dequeueReusableCellWithIdentifier("cell") as! FriendsFeedTableViewCell
//images array will vary 1-3: as of now
let images = masterImageArray[indexPath.row]
let scrollView = cell.imageScrollView
scrollView.pagingEnabled = true
scrollView.scrollEnabled = true
scrollView.tag = indexPath.row
var imageViews = [UIImageView]()
imageViews.append(cell.imageView_1)
imageViews.append(cell.imageView_2)
imageViews.append(cell.imageView_3)
cell.imageView_1.hidden = true
cell.imageView_2.hidden = true
cell.imageView_3.hidden = true
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
}
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)
}
}
//Button 和 Segue:知道要发送哪个图像
var imageSenderTag: Int()
func buttonPressed(sender: UIButton){ // which image we want to view
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
//curent page of scrollview so send over to new VC
}
}
我似乎不知道如何将当前图像发送到新的 ViewController。
我在 cellForRow 函数中有 UIImage 数组,我不知道如何访问它,因为它是本地的。此外,当前页面位于 TableViewCell 文件中,因此我不确定如何将“currentPage”传递给 tableViewContoller 文件。
解决此问题的最佳方法是什么。我想也许我应该在我的 tableViewCell 文件中添加处理 ScrollView 的所有代码。
最佳答案
您需要在 prepareForSegue 方法中创建单元格以获取 pageControl 的当前索引。现在你有 imageSenderTag-index 从你的 masterImageArray 得到正确的 imagesArray 并且你有 currentImageIndex 从你的 imagesArray 得到正确的图像。您的 prepareForSegue 方法看起来应该与此非常相似:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if (segue.identifier == "toViewImageVC"){
let viewImageVC: ViewImageViewController = segue.destinationViewController as! ViewImageViewController
let indexPath = NSIndexPath(index: imageSenderTag);
let cell: FriendsFeedTableViewCell = tableView.cellForRowAtIndexPath(indexPath) as! FriendsFeedTableViewCell
let currentImageIndex = cell.pageControl.currentPage
let images = masterImageArray[imageSenderTag]
let currentImage = images[currentImageIndex]
viewImageVC.imageView.image = currentImage
}
}
注意:这是一种快速而复杂的方法,因为 TableView 在 prepareForSegue 方法中再次重新创建单元格。更好的解决方案是创建一个自定义的委托(delegate)协议(protocol)或观察者协议(protocol),这样单元格就可以判断当前图像是否改变了他的观察者。
关于ios - 如何将 scrollView 中的图像发送到 "detailViewController"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33483827/