ios - 如何将 scrollView 中的图像发送到 "detailViewController"?

标签 ios swift scrollview tableview

我的 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/

相关文章:

iOS - 在 plist 文件中保存应用程序购买数据?

php - 来自后端的字符串应包含表情符号,但呈现为重音字母

ios - 在 iOS 中使用 Swift 数据库

swift - 从代码创建函数

ios - Firestore .orderBy 服务器时间戳不起作用 SWIFT

java - ScrollView 不滚动到顶部 - Android

ios - 将 Ruby on Rails 应用程序转换为 Phonegap iOS 应用程序的步骤是什么?

android - 更改 ScrollView 指示器的颜色

java - 有没有办法隐藏ScrollView的滚动指示器?

android - 同步 ScrollView 和 NestedScrollView