如何在表格视图单元格中自定义和实现滑块 swift
How to Customise and Implement Slider in tableview cell swift
任何人都可以建议我如何自定义 UISlider 并在 UITableViewCell 中实现它。
看了很多自定义UISlider的代码,但是不知道如何在TableViewCell中实现。
非常感谢 Swift 中的回答。
谢谢!
您必须创建自定义 table 视图单元格。这已经在这里得到回答,例如Custom UITableViewCell from nib in Swift.
自定义您的单元格以拥有 UISlider 并使用您已经看到的代码进行自定义。
试试吧..!可能是锻炼。
导入 AVFoundation
var player = AVPlayer()
var rate = Float()
var timer = NSTimer()
var tag: NSInteger!
var nameArr = NSMutableArray()
var urlArr = NSMutableArray()
@IBOutlet weak var songsTbl: UITableView!
// Slider
@IBOutlet weak var sliderTimer: UISlider!
var clickdArr = NSMutableArray()
var sliderView1: UIView!
var sliderBackground1: UIImageView!
var slider1: UISlider!
var currentIndex : NSInteger!
在您的 cellForRowAtIndexPath 中:
var cell : CurrentTuneCell! = tableView.dequeueReusableCellWithIdentifier("CurrentTuneCell") as! CurrentTuneCell
if(cell == nil)
{
cell = NSBundle.mainBundle().loadNibNamed("CurrentTuneCell", owner: self, options: nil)[0] as! CurrentTuneCell;
}
cell.selectionStyle = UITableViewCellSelectionStyle.None
cell.nameLbl.text = "\(self.nameArr[indexPath.row])"
cell.playBtn.addTarget(self, action: #selector(clickPlay), forControlEvents: .TouchUpInside)
cell.playBtn.tag = indexPath.row
if(clickdArr[indexPath.row] as! String == "1")
{
cell.playBtn.setTitle("Stop", forState: UIControlState.Normal)
cell.sliderVw.hidden = false;
let duration: CMTime = self.player.currentItem!.asset.duration
let seconds: Float64 = CMTimeGetSeconds(duration)
let someFloat = Float(seconds)
let crntDuration: CMTime = self.player.currentTime()
let crntSeconds: Float64 = CMTimeGetSeconds(crntDuration)
let myIntValue:Int = Int(crntSeconds)
cell.nameLbl.text = "\(myIntValue)"
let crntFloat = Float(crntSeconds)
cell.slider1.value = crntFloat;
cell.slider1.maximumValue = someFloat;
cell.slider1.addTarget(self, action: #selector(sliderValueChange), forControlEvents: .ValueChanged)
}
else
{
cell.playBtn.setTitle("Play", forState: UIControlState.Normal)
cell.sliderVw.hidden = true;
}
return cell
单击操作:
func clickPlay(sender: UIButton)
{
tag = sender.tag
for(var i=0;i<clickdArr.count;i++)
{
if(sender.tag == i)
{
let url = "\(self.urlArr[sender.tag])"
let playerItem = AVPlayerItem( URL:NSURL( string:url )! )
player = AVPlayer(playerItem:playerItem)
currentIndex = tag;
if(self.clickdArr[sender.tag] as! String == "0")
{
timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: #selector(updateSlider), userInfo: nil, repeats: true)
player.rate = 1.0;
rate = 1.0;
player.pause()
player.rate = rate;
player.play()
clickdArr.replaceObjectAtIndex(i, withObject: "1")
}
else
{
player.rate = 1.0;
rate = 1.0;
player.pause()
clickdArr .replaceObjectAtIndex(i, withObject: "0")
}
}
else
{
clickdArr .replaceObjectAtIndex(i, withObject: "0")
}
}
self.songsTbl.reloadData()
}
更新滑块
func updateSlider()
{
self.songsTbl.reloadData()
}
func sliderValueChange(sender: UISlider)
{
let myIntValue:Int64 = Int64(sender.value)
let timeMake = CMTimeMake(myIntValue,1)
player.seekToTime(timeMake)
player.play()
}
并且在您的自定义 Tableviewcell 中 class
@IBOutlet weak var playBtn: UIButton!
var slider1 : UISlider!
@IBOutlet weak var nameLbl: UILabel!
@IBOutlet weak var sliderVw: UIView!
在 awakeFromNib
let sliderView1 = UIView(frame: CGRectMake(0, 0, self.frame.size.width, self.frame.size.height))
self.sliderVw .addSubview(sliderView1)
let trackImage = UIImage(named: "slider.png")
let sliderBackground1 = UIImageView(image: trackImage!)
sliderBackground1.frame = CGRectMake(0, 0, self.sliderVw.frame.size.width, self.sliderVw.frame.size.height)
slider1 = UISlider(frame: CGRectMake(0, 0, self.sliderVw.frame.size.width, self.sliderVw.frame.size.height))
let sliderFrame = slider1.frame
slider1.frame = sliderFrame
slider1.center = sliderBackground1.center
slider1.setMinimumTrackImage(UIImage(named: "slider.png")!, forState: .Normal)
slider1.setMaximumTrackImage(UIImage(named: "blackBox.png")!, forState: .Normal)
let thumbImage = UIImage(named: "round.png")!
slider1.setThumbImage(thumbImage, forState: .Normal)
slider1.minimumValue = 0.0
slider1.maximumValue = 1.0
slider1.continuous = true
slider1.value = 0.0
sliderView1.addSubview(slider1)
self.slider1.maximumValue = 1.0;
self.slider1.minimumValue = 1.0;
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return arrImg.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tblView.dequeueReusableCell(withIdentifier: "tblCell", for: indexPath) as! tblCell
cell.userImg.image = UIImage(named: arrImg[indexPath.row])
cell.slider.tag = indexPath.row
cell.slider.addTarget(self, action: #selector(sliderChange), for: .valueChanged)
return cell
}
@objc func sliderChange(_ sender: UISlider){
let cell1 = tblView.cellForRow(at: IndexPath(row: sender.tag, section: 0)) as! tblCell
cell1.userImg.alpha = CGFloat(sender.value)
}
任何人都可以建议我如何自定义 UISlider 并在 UITableViewCell 中实现它。
看了很多自定义UISlider的代码,但是不知道如何在TableViewCell中实现。
非常感谢 Swift 中的回答。
谢谢!
您必须创建自定义 table 视图单元格。这已经在这里得到回答,例如Custom UITableViewCell from nib in Swift.
自定义您的单元格以拥有 UISlider 并使用您已经看到的代码进行自定义。
试试吧..!可能是锻炼。
导入 AVFoundation
var player = AVPlayer()
var rate = Float()
var timer = NSTimer()
var tag: NSInteger!
var nameArr = NSMutableArray()
var urlArr = NSMutableArray()
@IBOutlet weak var songsTbl: UITableView!
// Slider
@IBOutlet weak var sliderTimer: UISlider!
var clickdArr = NSMutableArray()
var sliderView1: UIView!
var sliderBackground1: UIImageView!
var slider1: UISlider!
var currentIndex : NSInteger!
在您的 cellForRowAtIndexPath 中:
var cell : CurrentTuneCell! = tableView.dequeueReusableCellWithIdentifier("CurrentTuneCell") as! CurrentTuneCell
if(cell == nil)
{
cell = NSBundle.mainBundle().loadNibNamed("CurrentTuneCell", owner: self, options: nil)[0] as! CurrentTuneCell;
}
cell.selectionStyle = UITableViewCellSelectionStyle.None
cell.nameLbl.text = "\(self.nameArr[indexPath.row])"
cell.playBtn.addTarget(self, action: #selector(clickPlay), forControlEvents: .TouchUpInside)
cell.playBtn.tag = indexPath.row
if(clickdArr[indexPath.row] as! String == "1")
{
cell.playBtn.setTitle("Stop", forState: UIControlState.Normal)
cell.sliderVw.hidden = false;
let duration: CMTime = self.player.currentItem!.asset.duration
let seconds: Float64 = CMTimeGetSeconds(duration)
let someFloat = Float(seconds)
let crntDuration: CMTime = self.player.currentTime()
let crntSeconds: Float64 = CMTimeGetSeconds(crntDuration)
let myIntValue:Int = Int(crntSeconds)
cell.nameLbl.text = "\(myIntValue)"
let crntFloat = Float(crntSeconds)
cell.slider1.value = crntFloat;
cell.slider1.maximumValue = someFloat;
cell.slider1.addTarget(self, action: #selector(sliderValueChange), forControlEvents: .ValueChanged)
}
else
{
cell.playBtn.setTitle("Play", forState: UIControlState.Normal)
cell.sliderVw.hidden = true;
}
return cell
单击操作:
func clickPlay(sender: UIButton)
{
tag = sender.tag
for(var i=0;i<clickdArr.count;i++)
{
if(sender.tag == i)
{
let url = "\(self.urlArr[sender.tag])"
let playerItem = AVPlayerItem( URL:NSURL( string:url )! )
player = AVPlayer(playerItem:playerItem)
currentIndex = tag;
if(self.clickdArr[sender.tag] as! String == "0")
{
timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: #selector(updateSlider), userInfo: nil, repeats: true)
player.rate = 1.0;
rate = 1.0;
player.pause()
player.rate = rate;
player.play()
clickdArr.replaceObjectAtIndex(i, withObject: "1")
}
else
{
player.rate = 1.0;
rate = 1.0;
player.pause()
clickdArr .replaceObjectAtIndex(i, withObject: "0")
}
}
else
{
clickdArr .replaceObjectAtIndex(i, withObject: "0")
}
}
self.songsTbl.reloadData()
}
更新滑块
func updateSlider()
{
self.songsTbl.reloadData()
}
func sliderValueChange(sender: UISlider)
{
let myIntValue:Int64 = Int64(sender.value)
let timeMake = CMTimeMake(myIntValue,1)
player.seekToTime(timeMake)
player.play()
}
并且在您的自定义 Tableviewcell 中 class
@IBOutlet weak var playBtn: UIButton!
var slider1 : UISlider!
@IBOutlet weak var nameLbl: UILabel!
@IBOutlet weak var sliderVw: UIView!
在 awakeFromNib
let sliderView1 = UIView(frame: CGRectMake(0, 0, self.frame.size.width, self.frame.size.height))
self.sliderVw .addSubview(sliderView1)
let trackImage = UIImage(named: "slider.png")
let sliderBackground1 = UIImageView(image: trackImage!)
sliderBackground1.frame = CGRectMake(0, 0, self.sliderVw.frame.size.width, self.sliderVw.frame.size.height)
slider1 = UISlider(frame: CGRectMake(0, 0, self.sliderVw.frame.size.width, self.sliderVw.frame.size.height))
let sliderFrame = slider1.frame
slider1.frame = sliderFrame
slider1.center = sliderBackground1.center
slider1.setMinimumTrackImage(UIImage(named: "slider.png")!, forState: .Normal)
slider1.setMaximumTrackImage(UIImage(named: "blackBox.png")!, forState: .Normal)
let thumbImage = UIImage(named: "round.png")!
slider1.setThumbImage(thumbImage, forState: .Normal)
slider1.minimumValue = 0.0
slider1.maximumValue = 1.0
slider1.continuous = true
slider1.value = 0.0
sliderView1.addSubview(slider1)
self.slider1.maximumValue = 1.0;
self.slider1.minimumValue = 1.0;
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return arrImg.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tblView.dequeueReusableCell(withIdentifier: "tblCell", for: indexPath) as! tblCell
cell.userImg.image = UIImage(named: arrImg[indexPath.row])
cell.slider.tag = indexPath.row
cell.slider.addTarget(self, action: #selector(sliderChange), for: .valueChanged)
return cell
}
@objc func sliderChange(_ sender: UISlider){
let cell1 = tblView.cellForRow(at: IndexPath(row: sender.tag, section: 0)) as! tblCell
cell1.userImg.alpha = CGFloat(sender.value)
}