UIView.layer.shadowPath
.import UIKit
@IBDesignable
class ViewController: UIViewController {
@IBOutlet weak var textField: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
textField.layer.shadowColor = UIColor.purple.cgColor
textField.layer.cornerRadius = 8
textField.layer.masksToBounds = false
textField.layer.shadowOffset = CGSize.zero
textField.layer.shadowRadius = 3.0
textField.layer.shadowOpacity = 0.7
let path = UIBezierPath()
path.move(to: CGPoint(x: 0.0, y: 0.0))
path.addLine(to: CGPoint(x: textField.bounds.size.width/2, y: textField.bounds.size.height/2))
path.addLine(to: CGPoint(x: textField.bounds.maxX, y: 0.0))
path.addLine(to: CGPoint(x: textField.bounds.maxX, y: textField.bounds.maxY))
path.addLine(to: CGPoint(x: 0.0, y: textField.bounds.maxY))
path.close()
textField.layer.shadowPath = path.cgPath
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
UISearchController
, а обычный UISearchBar
c кастомным аниматором UIViewPropertyAnimator
. @IBAction func buttonPressed(_ sender: UIButton) { ... }
есть аргумент sender
по которому Вы и можете различать какая именно кнопка вызвала этот action. А вообще бы лучше основную свою задачу описали, а то так не очень понятно что Вы хотите. Зачем Вам findById( findByClass ) ? Для этого есть IBOutlets
. Если Вы ищите кнопку среди subviews
, то тут можно приводить каждый subview
к типу UIButton
(если это возможно) и смотреть скажем его title
или смотреть его RestorationID. (iData: 22, dData: 2.99)
у тебя нет .next, но в классе говорится, что он всегда есть.class Link {
private let iData: Int
private let dData: Double
public var next: Link?
public init(iData: Int, dData: Double) {
self.iData = iData
self.dData = dData
}
public func displayLink() {
print("{\(iData), \(dData)}")
}
}
class LinkList {
private var first: Link?
public func isEmpty() -> Bool {
return first == nil
}
// INSERT
public func insertFirst(iData: Int, dData: Double) {
let newLink = Link(iData: iData, dData: dData)
newLink.next = first
first = newLink
}
// DELETE
public func deleteFirst() -> Link? {
// Проверяем есть ли первый элемент, иначе удалить ничего нельзя и мы возращаем nil
guard let first = first else { return nil }
// Если есть первый элемент, то ему присваиваем значение второго
// Если второго нет, то ему присвоится значение nil
// А это значит мы удалили все элементы в списке
self.first = first.next
return self.first
}
//Display
public func displayList() {
print("List (first --> last)")
// Создаем стартовый элемент, который изначально равен первому
// Это опциональный тип и может быть nil, так как первый элемент тоже может быть nil
// Если вдруг мы все удалили
var element = first
// Потом сразу делаем проверку на nil
// Если элемента нет, то и выводить ничего не будем
while element != nil {
element?.displayLink()
element = element?.next
}
print("----------")
}
}
let theList = LinkList()
theList.insertFirst(iData: 22, dData: 2.99)
theList.insertFirst(iData: 55, dData: 5.99)
theList.insertFirst(iData: 77, dData: 7.99)
//theList.deleteFirst()
//theList.deleteFirst()
//theList.deleteFirst()
theList.displayList()
import Foundation
// Дополним String для простоты работы с NSRegularExpression
extension String {
// Вычислимое св-во, которое возвращает NSRange строки String
var toNSRange: NSRange { return NSMakeRange(0, self.utf16.count) }
// Метод возвращающий String по заданному NSRange
func substringFromNSRange(with nsrange: NSRange) -> String? {
guard let range = Range(nsrange) else { return nil }
let start = String.UTF16Index(encodedOffset: range.lowerBound)
let end = String.UTF16Index(encodedOffset: range.upperBound)
return String(self.utf16[start..<end])
}
}
var htmlContext = "products_and_categories(123123)]}"
let regExp = try? NSRegularExpression(pattern: "products_and_categories(.*?)\\]\\}")
let matches = regExp?.matches(in: htmlContext, range: htmlContext.toNSRange)
for match in matches! {
print(htmlContext.substringFromNSRange(with: match.range)!)
}
doublench21 @doublench21
Дмирий Голованов, https://developer.apple.com/ios/human-interface-gu...
Написано 53 минуты назад
class MainViewController: UIViewController{
override func viewDidLoad() {
showModal()
}
func showModal() {
let modalViewController = ModalViewController()
modalViewController.modalPresentationStyle = .OverCurrentContext
present(modalViewController, animated: true, completion: nil)
}
}
class ModalViewController: UIViewController {
override func viewDidLoad() {
view.backgroundColor = UIColor.clear
view.isOpaque = false
}
}
let array = ["математика", "физика"]
. В tableViewController №2 создаете переменную которой будете передавать название предмета var name = ""
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "Seque" {
if let indexPath = self.tableView.indexPathForSelectedRow {
let destinationVC = segue.destination as! SecondTableViewController
destinationVC.name = self.array[(indexPath as NSIndexPath).row]
}
}
}