我想创建一个简单的应用程序,使孩子们学习词汇更有趣,同时使用iOS 11中的新拖放方法。
最后,我想与您分享。
- 2017年11月19日
- 通过Python进行游戏(第-4部分)
- 如何与阿特拉斯战争中的长者见面?
- OPINI:BLUEHOLE BUNUH DIRI DENGAN MERELEASE PUBG LITE
- 在玩看门狗2之前,您应该先看这些电影

您有两个选项卡,第一个用于提供一个可以在其中键入和编辑单词的区域,它是一个简单的表格视图。 第二个单词将您在表视图中输入的每个单词中的字母混杂在一起,以一个字母一个字母的顺序显示,邀请用户重新排列字母以使拼写正确。
当然,它并不完美; 我还没有将编辑内容放到tableview中,它并没有告诉您何时正确,但是准系统仍然存在,此外,我不想让本文过长。 漫长的技术教程我只是不喜欢我。
它是如何工作的,在这里。 首先,您需要在Xcode中基于选择选项卡的应用程序,并在创建后转到管理第一个选项卡的VC。 您可以在其中添加以下代码。
var myTableView:UITableView = UITableView()
覆盖func viewWillAppear(_动画:布尔){
super.viewWillAppear(动画)
//获取主屏幕边界
让screenSize:CGRect = UIScreen.main.bounds
让screenWidth = screenSize.width
让screenHeight = screenSize.height
myTableView.frame = CGRect(x:0,y:0,宽度:screenWidth,高度:screenHeight)
myTableView.dataSource =自我
myTableView.delegate =自我
myTableView.register(UITableViewCell.self,forCellReuseIdentifier:“ myCell”)
self.view.addSubview(myTableView)
}
func tableView(_ tableView:UITableView,numberOfRowsInSection部分:Int)-> Int
{
返回itemsToLoad.count
}
func tableView(_ tableView:UITableView,cellForRowAt indexPath:IndexPath)-> UITableViewCell
{
let cell:UITableViewCell = tableView.dequeueReusableCell(withIdentifier:“ myCell”,用于:indexPath作为IndexPath)
cell.textLabel?.text = itemsToLoad [indexPath.row]
返回单元
}
这都是漂亮的原始代码,也许是它引用的普通swift类数据文件最重要的方面,在其中我将核心数据结构放到了一个简单的数组中。
var itemsToLoad:[字符串] = [“狗”,“猫”,“垫子”,“星期六”]
我发现自己对技术的选择是对还是错。 移至第二个选项卡的视图控制器,您需要通过创建按钮来切换数据集来开始。 您可以使用此代码执行此操作。
覆盖func viewDidLoad(){
super.viewDidLoad()
如果firstRun {
firstRun =假
让按钮= UIButton()
button.setTitle(“ Next”,for:.normal)
button.setTitleColor(UIColor.blue,for:.normal)
button.translatesAutoresizingMaskIntoConstraints = false
button.addTarget(self,action:#selector(pressed),for:.touchUpInside)
self.view.addSubview(按钮)
button.topAnchor.constraint(等于:self.view.topAnchor,常数:128).isActive = true
button.centerXAnchor.constraint(equalTo:self.view.centerXAnchor).isActive = true
loadScramble(word2L:firstWord)
}
}
@objc func已按下(发送方:UIButton!){
whiteWin.removeFromSuperview()
如果firstWord <itemsToLoad.count — 1 {
firstWord = firstWord + 1
}其他{
firstWord = 0
}
loadScramble(word2L:firstWord)
}
firstRun布尔确保仅创建一次; 按钮本身会绕过itemsToLoad单词数组,并通过loadScramble方法逐一显示它们。
同时,loadScamble mthod的代码如下所示。 我们从堆栈视图开始,在该视图中,我们将每个单词的字母分别添加到固定大小的框中。
func loadScramble(word2L:Int){
whiteWin = UIStackView()
whiteWin.axis = UILayoutConstraintAxis.horizontalwhiteWin.distribution = UIStackViewDistribution.equalSpacing
whiteWin.alignment = UIStackViewAlignment.center
whiteWin.spacing = 8.0
self.view.addSubview(whiteWin)
whiteWin.translatesAutoresizingMaskIntoConstraints = false
whiteWin.centerYAnchor.constraint(等于:self.view.centerYAnchor).isActive = true
让演示= itemsToLoad [word2L]
让字母=数组(演示)
让position2S =(self.view.bounds.width-CGFloat((letters.count * 40)))/ 2
让margins = view.layoutMarginsGuide
whiteWin.leadingAnchor.constraint(equalTo:margins.leadingAnchor,常量:position2S).isActive = true
let shuffled =(字母为NSArray).shuffled()
用于洗牌{
让letterView = UILabel()
letterView.font = letterView.font.withSize(32)
letterView.text =“ \(字母)”
letterView.backgroundColor = UIColor.lightGray
letterView.textAlignment = .center
//除非交互式,否则拖放操作无效
letterView.isUserInteractionEnabled = true
whiteWin.addArrangedSubview(letterView)
让dragInteraction = UIDragInteraction(delegate:self)
letterView.addInteraction(dragInteraction)
让dropInteraction = UIDropInteraction(代表:自我)
letterView.addInteraction(dropInteraction)
letterView.widthAnchor.constraint(equalToConstant:32).isActive = true
letterView.heightAnchor.constraint(equalToConstant:32).isActive = true
letterView.translatesAutoresizingMaskIntoConstraints = false
}
}
我们还添加了新的拖放委托交互[不要忘记将委托添加到类方法中]。
这将我们带到新的代码部分,即拖放方法。
var dragLocation:UIView!
func dragInteraction(_交互:UIDragInteraction,itemsForBeginning会话:UIDragSession)-> [UIDragItem] {
让letter2M = interact.view为? UILabel
让letter2T = letter2M?.text作为NSString?
用于self.whiteWin.arrangedSubviews {
如果(boxes.frame.contains(session.location(in:self.whiteWin))){
dragLocation =盒子
}
}
让提供者= NSItemProvider(对象:letter2T!)
让item = UIDragItem(itemProvider:提供程序)
归还物品]
}
func dropInteraction(_交互:UIDropInteraction,performDrop会话:UIDropSession){
session.loadObjects(ofClass:NSString.self){对象在
让text2D =对象为! [串]
让dropLocation = session.location(in:self.whiteWin)
用于self.whiteWin.arrangedSubviews {
如果(boxes.frame.contains(dropLocation)){
(self.dragLocation as?UILabel)?. text =(boxes?UILabel)?. text
(框为UILabel)。.text = text2D.first
}
}
}
}
func dropInteraction(_交互:UIDropInteraction,
sessionDidUpdate会话:UIDropSession)-> UIDropProposal {
返回UIDropProposal(操作:.move)
}
拖动方法捕获源标签及其上的文本,然后传递到放置方法,放置进行交换。 那里有它。 我将在未来几天完成tableview并添加一些代码来检查答案,并将对此进行后续报道。