swift - 使用按钮获取核心数据中的索引
问题描述
我下面的快速代码想使用一个按钮转到索引中的第一张照片。如果用户在 tetxtfield 中输入 0,我的代码就可以工作。然后图像视图获取保存在索引中的第一个项目。我想要做的是当用户按下 rghtBtn 时,它将具有输入 0 的效果。然后如果再次按下它,它将获取索引中的第二个项目。所以它是不断增加指数。用户正在获取一个名为 pic 的二进制数据。我有一张二进制数据的照片。
import UIKit
import CoreData
class ViewController: UIViewController,UITextFieldDelegate {
lazy var context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
var itemsName : [NSManagedObject] = []
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
guard let text = (textField.text as? NSString)?.replacingCharacters(in: range, with: string), let index = Int(text) else {
return true
}
loadImage(at: index - 1 )
// currentPageLabel.text = tt.text
let ee = (textField.text as NSString?)?.replacingCharacters(in: range, with: string)
return true
}
func loadImage(at index : Int) {
let fetchRequest = NSFetchRequest<Users>(entityName: "Users")
fetchRequest.predicate = NSPredicate(format: "idx == %d", Int32(index))
do {
if let user = try context.fetch(fetchRequest).first {
pic.image = UIImage(data: user.pic!)
} else {
pic.image = UIImage(named: "np.png")
}
} catch {
print("Could not fetch \(error) ")
}
}
var pic = UIImageView()
var tt = UITextField()
var lzbel = UILabel()
var submit = UIButton()
var leftBtn = UIButton()
var rightBtn = UIButton()
override var prefersStatusBarHidden: Bool {
return true
}
override func viewDidLoad() {
super.viewDidLoad()
let item = Users(context: context)
let vex = UIImage(named: "lili.jpg")!.pngData()
item.pic = vex
item.idx = 0
let item2 = Users(context: context)
let vex2 = UIImage(named: "camila.jpg")!.pngData()
item2.pic = vex2
item2.idx = 1
print("Storing Data..")
do {
try context.save()
} catch {
print("Storing data Failed", error)
}
lzbel.textAlignment = .center
tt.placeholder = "Enter Page Number"
tt.delegate = self
view.backgroundColor = .white
[pic,tt,rightBtn].forEach{
view.addSubview($0)
$0.translatesAutoresizingMaskIntoConstraints = false
$0.backgroundColor = .green
}
pic.backgroundColor = .red
rightBtn.setTitle(">", for: .normal)
tt.textAlignment = .center
NSLayoutConstraint.activate ([
tt.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant :0),
tt.topAnchor.constraint(equalTo: view.topAnchor, constant : 0),
tt.heightAnchor.constraint(equalTo: view.heightAnchor, multiplier: 0.3, constant: 0),
tt.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant : 0),
tt.widthAnchor.constraint(equalTo: view.widthAnchor, multiplier: 7/7, constant: 0),
pic.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant :0),
pic.topAnchor.constraint(equalTo: tt.bottomAnchor, constant : 0),
pic.heightAnchor.constraint(equalTo: view.heightAnchor, multiplier: 0.33, constant: 0),
pic.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant : 0),
rightBtn.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant :0),
rightBtn.topAnchor.constraint(equalTo: pic.bottomAnchor, constant : 0),
rightBtn.heightAnchor.constraint(equalTo: view.heightAnchor, multiplier: 0.33, constant: 0),
rightBtn.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant : 0),
])
tt.backgroundColor = .systemGray
submit.backgroundColor = .purple
submit.setTitle("Save", for: .normal)
let appD = UIApplication.shared.delegate as! AppDelegate
let context = appD.persistentContainer.viewContext
let fetchRequest = NSFetchRequest<NSManagedObject>(entityName: "Users")
fetchRequest.sortDescriptors = [NSSortDescriptor(key: "idx", ascending: true)]
do {
itemsName = try context.fetch(fetchRequest)
}catch {
print("Ashley Tisdale")
}
lzbel.text = String(itemsName.count) + String(" total pages saved")
lzbel.backgroundColor = .red
rightBtn.addTarget(self, action: #selector(rightBtnPress), for: .touchDown)
}
@objc func rightBtnPress(){
//Hiting this code should have the effect
}
}
解决方案
您需要一个索引变量。
var counter = 0
然后在rightBtnPress
索引处加载图像counter
并增加变量。
@objc func rightBtnPress() {
loadImage(at: counter)
counter += 1
}
推荐阅读
- oracle - Oracle 包中的 SELECT ... FOR UPDATE
- matlab - 在 MATLAB 中从许多相同大小的矩阵中获取相同的子集
- javascript - 为什么 Webpack 认为我正在运行开发构建?
- c++ - 为什么我得到“候选构造函数不可行”?
- html - 在移动视图中引导 4 张单独的卡片?
- java - JADE IPMS:代理迁移失败
- swift - 无法以编程方式将情节提要中的颜色集更改为 xcassets 目录中的颜色
- python - 使用 f String 插入字符或符号@
- c++ - 如何在 C++ arduino 中从字符串中拆分特定部分
- opendaylight - 铍发布无法在 Web 界面上登录 (http://10.10.10.2:8181/index.html)