我的UIImageView
中有一个NewsTableViewController.swift
(0x0),其NewsDetailTableViewController.swift
位于UIImageView
,其中UIImageView
为600x216。
如果你问为什么第一个detailImages
是0x0,那是因为这是我知道如何通过每个单元划分不同图像的唯一方法。我的主VC中有16个单元,每个单元VC都有不同的图像。我不想在主VC的单元格中显示图像。
如果你能提出另一种方法,那就太好了。
无论如何,保持这个解决方案,我的segue有什么问题?图像存储在名为 NewsTableViewController.swift
的数组中。此数组位于NewsDetailTableViewController.swift
。
这是我的UIImageView
:
prepareForSegue
应该是标题和内容之间的空白区域。
以下是NewsTableViewController.swift
中的 override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?){
if segue.identifier == "showDetail" {
if let indexPath = tableView.indexPathForSelectedRow {
let destinationController = segue.destinationViewController as! NewsDetailTableViewController
destinationController.item = items[indexPath.row]
//destinationController.imageNames = detailImages
}
}
}
方法:
NewsDetailTableViewController.swift
这是我的import UIKit
class NewsDetailTableViewController: UITableViewController {
var items = [Item]()
var item:Item!
var siteURL = "http://annabellesykes.netau.net/shailenewoodleyfansappjson.json"
var image:UIImageView!
@IBOutlet weak var segueImageView:UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
title = "News"
navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .Plain, target: nil, action: nil)
getLatestNews()
tableView.estimatedRowHeight = 400.0
tableView.rowHeight = UITableViewAutomaticDimension
tableView.separatorStyle = UITableViewCellSeparatorStyle.None
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
// MARK: - Table view data source
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! NewsDetailTableViewCell
// Configure the cell...
cell.newsDetailTitle.text = item.title
cell.newsDetailDate.text = item.date
cell.newsDetailContent.text = item.content
cell.newsDetailImageView.image = UIImage()
cell.newsDetailTitle.lineBreakMode = NSLineBreakMode.ByWordWrapping
cell.newsDetailTitle.numberOfLines = 999
cell.newsDetailContent.lineBreakMode = NSLineBreakMode.ByWordWrapping
cell.newsDetailContent.numberOfLines = 999
cell.newsDetailTitle.sizeToFit()
cell.newsDetailContent.sizeToFit()
return cell
}
override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
override func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
func getLatestNews() {
let request = NSURLRequest(URL: NSURL(string: siteURL)!)
let urlSession = NSURLSession.sharedSession()
let task = urlSession.dataTaskWithRequest(request, completionHandler: {
(data, response, error) -> Void in
if let error = error {
print(error)
return
}
if let data = data {
self.items = self.parseJsonData(data)
NSOperationQueue.mainQueue().addOperationWithBlock({ () -> Void in
self.tableView.reloadData()
})
}
})
task.resume()
}
func parseJsonData(data: NSData) -> [Item] {
var items = [Item]()
do {
let jsonResult = try NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.AllowFragments) as? NSDictionary
let jsonItems = jsonResult?["items"] as! [AnyObject]
for jsonItem in jsonItems {
let item = Item()
item.title = jsonItem["title"] as! String
item.content = jsonItem["content"] as! String
item.date = jsonItem["date"] as! String
items.append(item)
}
} catch {
print(error)
}
return items
}
}
代码:
NewsTableViewController.swift
这是我的import UIKit
class NewsTableViewController: UITableViewController {
var siteURL = "http://annabellesykes.netau.net/shailenewoodleyfansappjson.json"
var items = [Item]()
var item:Item!
var newsImage:UIImageView?
@IBOutlet weak var imageHeaderView1:UIImageView!
var detailImages = ["newsimage1.jpg", "newsimage2.jpg", "newsimage3.jpg", "newsimage4.jpg", "newsimage5.jpg", "newsimage6.jpg", "newsimage7.jpg", "newsimage8.jpg", "newsimage9.jpg", "newsimage10.jpg", "newsimage10.jpg", "newsimage11.jpg", "newsimage12.jpg", "newsimage13.jpg", "newsimage14.jpg", "newsimage15.jpg", "newsimage16.jpg"]
override func viewDidLoad() {
super.viewDidLoad()
getLatestNews()
navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .Plain, target: nil, action: nil)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
// MARK: - Table view data source
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return items.count
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! NewsTableViewCell
// Configure the cell...
cell.titleLabel.text = items[indexPath.row].title
cell.dateLabel.text = items[indexPath.row].date
cell.contentLabel.text = items[indexPath.row].content
cell.newsImageView.image = UIImage(named: detailImages[indexPath.row])
cell.titleLabel.lineBreakMode = NSLineBreakMode.ByWordWrapping
cell.titleLabel.numberOfLines = 999
cell.contentLabel.lineBreakMode = NSLineBreakMode.ByWordWrapping
cell.contentLabel.numberOfLines = 3
cell.dateLabel.lineBreakMode = NSLineBreakMode.ByWordWrapping
cell.dateLabel.numberOfLines = 999
cell.dateLabel.sizeToFit()
//cell.imageView?.image = self.imageNames[indexPath.row]
return cell
}
override func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [UITableViewRowAction] {
let shareAction = UITableViewRowAction(style: UITableViewRowActionStyle.Default, title: "Share", handler: { (action, indexPath) -> Void in
let defaultText = "Check this out: " + self.items[indexPath.row].title + "! " + self.items[indexPath.row].content
let activityController = UIActivityViewController(activityItems: [defaultText], applicationActivities: nil)
self.presentViewController(activityController, animated: true, completion: nil)
})
shareAction.backgroundColor = UIColor(red: 179.0/255.0, green: 239.0/255.0, blue: 247.0/255.0, alpha: 1.0)
return [shareAction]
}
override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath){
cell.alpha = 0
UIView.animateWithDuration(1.0, animations: { cell.alpha = 1 })
}
func getLatestNews() {
let request = NSURLRequest(URL: NSURL(string: siteURL)!)
let urlSession = NSURLSession.sharedSession()
let task = urlSession.dataTaskWithRequest(request, completionHandler: {
(data, response, error) -> Void in
if let error = error {
print(error)
return
}
if let data = data {
self.items = self.parseJsonData(data)
NSOperationQueue.mainQueue().addOperationWithBlock({ () -> Void in
self.tableView.reloadData()
})
}
})
task.resume()
}
func parseJsonData(data: NSData) -> [Item] {
var items = [Item]()
do {
let jsonResult = try NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.AllowFragments) as? NSDictionary
let jsonItems = jsonResult?["items"] as! [AnyObject]
for jsonItem in jsonItems {
let item = Item()
item.title = jsonItem["title"] as! String
item.content = jsonItem["content"] as! String
item.date = jsonItem["date"] as! String
items.append(item)
}
} catch {
print(error)
}
return items
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?){
if segue.identifier == "showDetail" {
if let indexPath = tableView.indexPathForSelectedRow {
let destinationController = segue.destinationViewController as! NewsDetailTableViewController
destinationController.item = items[indexPath.row]
destinationController.image = UIImageView(image: UIImage(named: detailImages[indexPath.row]))
}
}
}
@IBAction func unwindToHomeScreen(segue: UIStoryboardSegue) {
}
}
:
$TOMCAT_HOME/conf
答案 0 :(得分:0)
您似乎无法在cellForRowAtIndexPath
的{{1}}内正确设置图片。
这一行特别是:
NewsDetailTableViewController.swift
答案 1 :(得分:-2)
Here is code in objective c...
#pragma Mark Prepare For Segue
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"segue"]) {
viewcontroller *destViewController = segue.destinationViewController;
destViewController.image=[[Apparels objectAtIndex:0];
}
}
//In other class
@property (strong, nonatomic) NSString *image;
UIImageView.image=[UIImage imageNamed:image];