this article talks about the different ip ranges
https://kb.iu.edu/d/aoyj
Wednesday, September 25, 2019
How to create a custom header in tableview section that stretch when orientation changes
override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
if section == TableSections.OtherDevices.rawValue {
let v = UIView(frame: CGRect(x: 0, y: 0, width: tableView.bounds.width, height: SetupConstants.DEFAULT_HEADER_HEIGHT))
self.spinner.center = CGPoint(x:(tableView.bounds.size.width - (SetupConstants.DEFAULT_HEADER_HEIGHT / 2)), y:SetupConstants.DEFAULT_HEADER_HEIGHT/2)
spinner.hidesWhenStopped = true
spinner.startAnimating()
spinner.color = UIColor.blue
v.addSubview(spinner)
spinner.autoresizingMask = .flexibleLeftMargin
v.autoresizingMask = .flexibleWidth
return v
}
return nil
}
Monday, September 23, 2019
Print c++ map to logs
// TODO: (ravij): remove this code after testing is complete >>>
long unsigned mySize = static_cast<long unsigned>(parameterMap.size());
ZF_LOGD("number of items in teh config map %lu", mySize);
for ( auto it = parameterMap.begin(); it != parameterMap.end(); ++it )
std::cout << " " << it->first << ":" << it->second;
std::cout << std::endl;
Friday, August 2, 2019
Structure of a framework
MyFramework.framework/ |
MyFramework -> Versions/Current/MyFramework |
Resources -> Versions/Current/Resources |
Versions/ |
A/ |
MyFramework |
Headers/ |
MyHeader.h |
Resources/ |
English.lproj/ |
InfoPlist.strings |
Info.plist |
Current -> A |
Monday, July 29, 2019
Thursday, July 25, 2019
How to add buttons to the navigation bar
http://swiftdeveloperblog.com/code-examples/create-uibarbuttonitem-programmatically/
NOTE:
remember to pass in a navigation controller
NOTE:
remember to pass in a navigation controller
let navController = UINavigationController(rootViewController: viewController) // Creating a navigation controller with VC1 at the root of the navigation stack.
DispatchQueue.main.async {
self.navigationController?.visibleViewController?.present(navController, animated: true, completion: nil)
}
Tuesday, May 14, 2019
How to create a coordinator to launch different view controllers
https://www.swiftbysundell.com/posts/navigation-in-swift
Thursday, February 14, 2019
How best to create static functions
///////////////////////////////
In Struct:
struct MyStruct {
static func something() {
println("Something")
}
}
Called via:
MyStruct.something()
///////////////////////////////
In Class
class MyClass {
class func someMethod() {
println("Some Method")
}
}
called via:
MyClass.someMethod()
Tuesday, February 12, 2019
How to check what is inside a Assets.car file
xcrun --sdk iphoneos assetutil --info
EXAMPLE OUTPUT:
{
"AssetType" : "Image",
"BitsPerComponent" : 8,
"ColorModel" : "Monochrome",
"Colorspace" : "gray gamma 22",
"DeploymentTarget" : "2018",
"Idiom" : "universal",
"Image Type" : "kCoreThemeOnePartScale",
"Name" : "bluetooth_on",
"Opaque" : false,
"PixelHeight" : 54,
"PixelWidth" : 54,
"RenditionName" : "baseline_bluetooth_black_18pt_3x.png",
"Scale" : 3,
"SizeOnDisk" : 338,
"Template Mode" : "template"
},
{
"AssetType" : "Image",
"BitsPerComponent" : 8,
"ColorModel" : "Monochrome",
"Colorspace" : "gray gamma 22",
"DeploymentTarget" : "2018",
"Idiom" : "universal",
"Image Type" : "kCoreThemeOnePartScale",
"Name" : "keypad_black_off",
"Opaque" : false,
"PixelHeight" : 168,
"PixelWidth" : 168,
"RenditionName" : "keypad_black_off@3x.png",
"Scale" : 3,
"SizeOnDisk" : 338,
"Template Mode" : "automatic"
},
Monday, February 11, 2019
How to cleanly launch VC using storyboard
enum AppStoryboard : String {
case Main = "Main"
case PreLogin = "PreLogin"
case Timeline = "Timeline"
var instance : UIStoryboard {
return UIStoryboard(name: self.rawValue, bundle: Bundle.main)
}
}
// USAGE :
let storyboard = AppStoryboard.Main.instance
// Old Way
let storyboard = UIStoryboard(name: “Main”, bundle: Bundle.main)
https://medium.com/@gurdeep060289/clean-code-for-multiple-storyboards-c64eb679dbf6
Labels:
Swift
Friday, February 8, 2019
What are the View Controller's lifecycle events
# Controller Lifecycle events order ?
There are a few different lifecycle event
- loadView
Creates the view that the controller manages. It’s only called when the view controller is created and only when done programatically. It is responsible for making the view property exist in the first place.
- viewDidLoad
Called after the controller’s view is loaded into memory. It’s only called when the view is created.
- viewWillAppear
It’s called whenever the view is presented on the screen. In this step the view has bounds defined but the orientation is not applied.
- viewWillLayoutSubviews
Called to notify the view controller that its view is about to layout its subviews. This method is called every time the frame changes
- viewDidLayoutSubviews
Called to notify the view controller that its view has just laid out its subviews. Make additional changes here after the view lays out its subviews.
- viewDidAppear
Notifies the view controller that its view was added to a view hierarchy.
- viewWillDisappear
Before the transition to the next view controller happens and the origin view controller gets removed from screen, this method gets called.
- viewDidDisappear
After a view controller gets removed from the screen, this method gets called. You usually override this method to stop tasks that are should not run while a view controller is not on screen.
- viewWillTransition(to:with:)
When the interface orientation changes, UIKit calls this method on the window’s root view controller before the size changes are about to be made. The root view controller then notifies its child view controllers, propagating the message throughout the view controller hierarchy.`
There are a few different lifecycle event
- loadView
Creates the view that the controller manages. It’s only called when the view controller is created and only when done programatically. It is responsible for making the view property exist in the first place.
- viewDidLoad
Called after the controller’s view is loaded into memory. It’s only called when the view is created.
- viewWillAppear
It’s called whenever the view is presented on the screen. In this step the view has bounds defined but the orientation is not applied.
- viewWillLayoutSubviews
Called to notify the view controller that its view is about to layout its subviews. This method is called every time the frame changes
- viewDidLayoutSubviews
Called to notify the view controller that its view has just laid out its subviews. Make additional changes here after the view lays out its subviews.
- viewDidAppear
Notifies the view controller that its view was added to a view hierarchy.
- viewWillDisappear
Before the transition to the next view controller happens and the origin view controller gets removed from screen, this method gets called.
- viewDidDisappear
After a view controller gets removed from the screen, this method gets called. You usually override this method to stop tasks that are should not run while a view controller is not on screen.
- viewWillTransition(to:with:)
When the interface orientation changes, UIKit calls this method on the window’s root view controller before the size changes are about to be made. The root view controller then notifies its child view controllers, propagating the message throughout the view controller hierarchy.`
How to add a path when saving data to the documents folder
let filemgr = FileManager.default
let dirPaths = filemgr.urls(for: .documentDirectory, in: .userDomainMask)
let docsURL = dirPaths[0]
let newDir = docsURL.appendingPathComponent("data").path
do {
try filemgr.createDirectory(atPath: newDir,
withIntermediateDirectories: true, attributes: nil)
} catch let error as NSError {
print("Error: \(error.localizedDescription)")
}
let dirPaths = filemgr.urls(for: .documentDirectory, in: .userDomainMask)
let docsURL = dirPaths[0]
let newDir = docsURL.appendingPathComponent("data").path
do {
try filemgr.createDirectory(atPath: newDir,
withIntermediateDirectories: true, attributes: nil)
} catch let error as NSError {
print("Error: \(error.localizedDescription)")
}
How to create a Singleton
class Environment: NSObject {
private var values = [String:String]()
let skipLogin:Bool
let baseURL:String
let baseAuthURL:String
class var shared: Environment {
struct Singleton {
static let instance = Environment()
}
return Singleton.instance
}
}
private var values = [String:String]()
let skipLogin:Bool
let baseURL:String
let baseAuthURL:String
class var shared: Environment {
struct Singleton {
static let instance = Environment()
}
return Singleton.instance
}
}
Thursday, February 7, 2019
How to create a custom cell with callback when row selected
custom cell:
import UIKit
typealias ActionCallback = () -> Void
class ActionLinkCell: UITableViewCell {
var cb: ActionCallback? = nil
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: UITableViewCell.CellStyle.default, reuseIdentifier: reuseIdentifier)
self.accessoryType = .disclosureIndicator
self.textLabel?.textColor = self.tintColor
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(ActionLinkCell.handleIsTap(_:)))
self.addGestureRecognizer(tapGesture)
}
@objc func handleIsTap(_ sender: UIGestureRecognizer) {
debugPrint("\(#function)")
if let callback = self.cb {
callback()
}
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
func config(title: String, callback: ActionCallback? = nil) {
self.textLabel?.text = title
self.setNeedsDisplay()
self.cb = callback
}
}
calling code:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: bluetoothActionLinkCellId, for: indexPath) as! ActionLinkCell
let message = NSLocalizedString("Pair device using Bluetooth", comment: "")
cell.config(title: message) {
//MY CODE GOES HERE
}
return cell
}
Wednesday, January 30, 2019
How to check if bluetooth is enabled
viewDidLoad:
self.cbCentralManager = CBCentralManager(delegate: self, queue: nil, options: [CBCentralManagerOptionShowPowerAlertKey : false])self.cbCentralManager.delegate = self
handle:
func centralManagerDidUpdateState(_ central: CBCentralManager) {switch central.state {
case .poweredOn:
btEnabled = true
break
case .poweredOff:
btEnabled = false
break
case .resetting:
break
case .unauthorized:
break
case .unsupported:
break
case .unknown:
break
default:
break
}
}
Protocol:
extension MyVC: CBCentralManagerDelegate {}
Labels:
Swift
Friday, January 25, 2019
How to initialize a ViewControl with arguments
class ViewController: UIViewController {
var locationManager: CLLocationManager
var userLocation: CLLocation?
init(locationProvider: CLLocationManager = CLLocationManager()) {
self.locationManager = locationProvider
super.init(nibName: nil, bundle: nil)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func viewDidLoad() {
super.viewDidLoad()
locationManager.delegate = self
}
func requestUserLocation() {
if CLLocationManager.authorizationStatus() == .authorizedWhenInUse {
locationManager.startUpdatingLocation()
} else {
locationManager.requestWhenInUseAuthorization()
}
}
}
var locationManager: CLLocationManager
var userLocation: CLLocation?
init(locationProvider: CLLocationManager = CLLocationManager()) {
self.locationManager = locationProvider
super.init(nibName: nil, bundle: nil)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func viewDidLoad() {
super.viewDidLoad()
locationManager.delegate = self
}
func requestUserLocation() {
if CLLocationManager.authorizationStatus() == .authorizedWhenInUse {
locationManager.startUpdatingLocation()
} else {
locationManager.requestWhenInUseAuthorization()
}
}
}
Labels:
Swift
Tuesday, January 22, 2019
How to get the tint color of your view, so text in a UILabel looks like a link
self.view.tintColor;
Labels:
Swift
How to set the font size without changing the font itself
cell.textLabel?.font = UIFont.systemFont(ofSize: 15.0, weight: UIFont.Weight.regular)
cell.detailTextLabel?.font = UIFont.systemFont(ofSize: 12.0, weight: UIFont.Weight.regular)
Labels:
Swift
Wednesday, January 9, 2019
How to get the current orientation of the device without knowing it is portrait or landscape
override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
if UIDevice.currentDevice().orientation.isLandscape.boolValue {
print("landscape")
} else {
print("portrait")
}
}
Labels:
Swift
How to add refresh controller to table when drag down
1. initinalize a variable:
initialize
private let apRefreshControl = UIRefreshControl()
viewdidload:
// Add Refresh Control to Table View
self.apRefreshControl.addTarget(self, action: #selector(handleRefresh(_:)), for: .valueChanged)
self.tableView.refreshControl = apRefreshControl
// Add Refresh Control to Table View
if #available(iOS 10.0, *) {
tableView.refreshControl = apRefreshControl
} else {
tableView.addSubview(apRefreshControl)
}
//Configure Refresh Control
apRefreshControl.addTarget(self, action: #selector(refreshWeatherData(_:)), for: .valueChanged)
handler
@objc private func refreshWeatherData(_ sender: Any) {
fetchData()
}
private func fetchData() {
self.tableView.reloadData()
self.apRefreshControl.endRefreshing()
}
Labels:
Swift
How to dynamically get label height
extension UILabel {
var optimalHeight : CGFloat {
get
{
let label = UILabel(frame: CGRect(x: 0, y: 0, width: self.bounds.width, height: CGFloat.greatestFiniteMagnitude))
label.numberOfLines = 0
label.lineBreakMode = NSLineBreakMode.byWordWrapping
label.font = self.font
label.text = self.text
label.sizeToFit()
return label.frame.height
}
}
}
Labels:
Swift
Subscribe to:
Comments (Atom)