我正在使用iCarousel,我必须创建自己的按钮.我想将编程按钮中的数据传递给另一个视图,但我没有segue标识符,因为我以编程方式创建了按钮.我不知道是否可以通过编程方式创建segue的标识符.
button.addTarget(self, action: #selector(buttonAction3), for: .touchUpInside)
button.setTitle("\(titulos[index])", for: .normal)
tempView.addSubview(button)
let myImage = UIImage(named: "modo4.png") as UIImage?
button.setImage(myImage, for: .normal)
let viewController:UIViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "modo") as! Modo1ViewController
self.present(viewController, animated: false, completion: nil)
if segue.identifier == "" {
if let destination = segue.destination as? Modo1ViewController {
destination.nomb = nombres
}
}
Run Code Online (Sandbox Code Playgroud) 错误1:当我尝试stringValue从元数据显示以上错误时Swift3:
let myMetadata: AVMetadataMachineReadableCodeObject = metadataObjects[0] as! AVMetadataMachineReadableCodeObject
// take out the system and check-digits
let myBarcode = myMetadata.stringValue[1...11] //error
Run Code Online (Sandbox Code Playgroud)
错误2:
在String的扩展中,我将这些写入get right(x)和left(x)function来获取子字符串:
extension String {
// length of string
var length: Int {
return self.characters.count
}
// right(x) and left(x) function to get substring
func right(_ i: Int) -> String?
{
return self[self.length-i ... self.length-1 ] //error
}
func left(_ i: Int) -> String?
{
return self[0 ... i-1] //error
} …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Swift制作游戏Pong,但不使用SpriteKit。到目前为止,我已经能够在视图上成功绘制一个矩形,并且能够在屏幕上拖动它。这是我当前的代码:
import UIKit
class PongView: UIView {
lazy var paddle: CGRect = {
return CGRect(x: 200,
y: 200,
width: self.frame.width / 6,
height: self.frame.height / 60)
}()
var movePaddle = false
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
let gesture = UIPanGestureRecognizer(target: self, action: #selector(dragPaddle(recognizer:)))
addGestureRecognizer(gesture)
}
override func draw(_ rect: CGRect) {
drawPaddle(rect)
}
func drawPaddle(_ rect: CGRect) {
let path = UIBezierPath(rect: paddle)
UIColor.black.set()
path.fill()
}
func paddleInBounds() -> Bool {
//padding vars are calculated in …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 WKWebView 加载本地 html 文件并希望将 postMessage 发送到我的 html ,但 postMessage 不起作用,WKWebView 无法加载 html 文件。
加载WKWebView:
- (void)viewDidLoad {
[super viewDidLoad];
WKWebViewConfiguration *theConfiguration = [[WKWebViewConfiguration alloc] init];
WKUserContentController* userController = [[WKUserContentController alloc]init];
theConfiguration.userContentController = userController;
_twkwebview = [[WKWebView alloc] initWithFrame:self.view.frame configuration:theConfiguration];
NSString *indexHTMLPath = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"];
NSURL *url = [NSURL fileURLWithPath:indexHTMLPath];
NSURLRequest *nsrequest=[NSURLRequest requestWithURL:url];
[theConfiguration.userContentController
addScriptMessageHandler:self name:@"interOp"];
[_twkwebview loadRequest:nsrequest];
[self setupPostMessageScript];
[self.test addSubview:_twkwebview];
}
Run Code Online (Sandbox Code Playgroud)
从这里,我想发布消息,但它不起作用。我没有收到任何错误,这是源代码(html):
- (void)setupPostMessageScript {
NSString *source = @"window.originalPostMessage = window.postMessage;"
"window.postMessage = function(message, targetOrigin, transfer) …Run Code Online (Sandbox Code Playgroud) 我想通过搜索栏过滤结构数组。我知道如何过滤字符串数组,但不幸的是我无法将它应用于结构数组。这是我已经做过的事情:
var BaseArray: [dataStruct] = []
var filteredArray: [dataStruct] = []
Run Code Online (Sandbox Code Playgroud)
BaseArray 是具有多个变量的结构数组。我的目标是过滤所有变量。有任何想法吗?
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
if searchBar.text == nil || searchBar.text == ""{
isSearching = false
view.endEditing(true)
tableView.reloadData()
}
else{
isSearching = true
filteredArray = BaseArray.filter { $0.name == searchText }
tableView.reloadData()
}
}
Run Code Online (Sandbox Code Playgroud) 我试图从数组保持事件对象中删除特定的Event对象(我自己的类).这是我对数组的声明.
private var positiveEvents : [Event] = []
Run Code Online (Sandbox Code Playgroud)
现在,这是我如何尝试从数组中删除Event对象.此方法(disposeOfflineEvents)每30秒调用一次,因此positiveEvents可能包含某些元素或根本不存在任何元素.
func disposeOfflineEvents() {
for event in positiveEvents {
if !event.ongoing {
positiveEvents.remove(at: positiveEvents.index(where: { $0 === event })!)
print("! - Disposing of an event!")
}
}
}
Run Code Online (Sandbox Code Playgroud)
我看到了这个问题,但我使用的是Swift 4,所以我没有索引(of:Event)方法.我当前的解决方案的问题是,当使用"==="检查对象的相等性时,我偶尔会遇到错误:
有没有更好的方法呢?
我正在navigationItem.leftBarButtonItem = editButtonItem根据下实施viewDidLoad(),据说我也必须实施setEditing(_ editing: Bool, animated: Bool)。似乎没有setEditing功能,每个编辑功能都可以正常工作。它有什么作用??
override func viewDidLoad() {
super.viewDidLoad()
navigationController?.navigationBar.prefersLargeTitles = true
navigationItem.leftBarButtonItem = editButtonItem
tableView.allowsMultipleSelectionDuringEditing = true
}
override func setEditing(_ editing: Bool, animated: Bool) {
super.setEditing(editing, animated: true)
tableView.setEditing(tableView.isEditing, animated: true)
}
Run Code Online (Sandbox Code Playgroud) 我使用了以下代码:
NotificationCenter.default.addObserver(self,selector: #selector(ViewController.restartVideoFromBeginning),name: NSNotification.Name.AVPlayerItemDidPlayToEndTime,object: nil)
@objc func restartVideoFromBeginning() {
let seconds : Int64 = 0
let preferredTimeScale : Int32 = 1
let seekTime : CMTime = CMTimeMake(seconds, preferredTimeScale)
player!.seek(to: seekTime)
player!.play()
}
Run Code Online (Sandbox Code Playgroud)
但是里面的玩家restartVideoFromBeginning有零值,有谁知道为什么?
我曾经使用此代码来获取对应UIViewController的我的UIView:
func parentVC(forView view: UIView) -> UIViewController? {
var responder = view as UIResponder
while (responder != nil) {
if let viewController = responder as? UIViewController {
return viewController
}
responder = responder.next!
}
return nil
}
Run Code Online (Sandbox Code Playgroud)
但是,我收到了编译器的警告:
将“UIResponder”类型的非可选值与“nil”进行比较总是返回true
所以我尝试responder = responder.next!在while循环条件内移动:
func parentVC(forView view: UIView) -> UIViewController? {
var responder = view as UIResponder
while (responder = responder.next!) {
if let viewController = responder as? UIViewController {
return viewController
}
} …Run Code Online (Sandbox Code Playgroud)