Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone UIDatePicker仅显示年份_Iphone_Objective C_Ios - Fatal编程技术网

Iphone UIDatePicker仅显示年份

Iphone UIDatePicker仅显示年份,iphone,objective-c,ios,Iphone,Objective C,Ios,有没有办法让UIDatePicker仅显示年份?您不能使用UIDatePicker执行此操作,但可以使用UIPicker 您需要为年份创建一个数组,并使用UIPicker委托将它们添加到UIPicker 这是一个教程 不能使用UIDatePicker执行此操作,但可以使用UIPicker执行此操作 您需要为年份创建一个数组,并使用UIPicker委托将它们添加到UIPicker 这是一个教程 我有一个小代码要删除,但是如果代码段在某个地方在线,它会更好。这并不令人惊讶,但它是可搜索的 Objec

有没有办法让UIDatePicker仅显示年份?

您不能使用
UIDatePicker
执行此操作,但可以使用
UIPicker

您需要为年份创建一个数组,并使用
UIPicker
委托将它们添加到
UIPicker


这是一个教程

不能使用
UIDatePicker
执行此操作,但可以使用
UIPicker
执行此操作

您需要为年份创建一个数组,并使用
UIPicker
委托将它们添加到
UIPicker


这是一个教程

我有一个小代码要删除,但是如果代码段在某个地方在线,它会更好。这并不令人惊讶,但它是可搜索的

Objective-C代码创建自1960年以来所有年份的数组。非常适合输入
ui选择器

//Get Current Year into i2
NSDateFormatter* formatter = [[[NSDateFormatter alloc] init]autorelease];
[formatter setDateFormat:@"yyyy"];
int i2  = [[formatter stringFromDate:[NSDate date]] intValue];


//Create Years Array from 1960 to This year
years = [[NSMutableArray alloc] init];
for (int i=1960; i<=i2; i++) {
    [years addObject:[NSString stringWithFormat:@"%d",i]];
}
不要忘记接口中的声明

//Data
NSMutableArray *years;
最糟糕的是


引用自

我有一段代码要删除,但是如果代码段在某个地方在线,它会更好。这并不令人惊讶,但它是可搜索的

Objective-C代码创建自1960年以来所有年份的数组。非常适合输入
ui选择器

//Get Current Year into i2
NSDateFormatter* formatter = [[[NSDateFormatter alloc] init]autorelease];
[formatter setDateFormat:@"yyyy"];
int i2  = [[formatter stringFromDate:[NSDate date]] intValue];


//Create Years Array from 1960 to This year
years = [[NSMutableArray alloc] init];
for (int i=1960; i<=i2; i++) {
    [years addObject:[NSString stringWithFormat:@"%d",i]];
}
不要忘记接口中的声明

//Data
NSMutableArray *years;
最糟糕的是


引用自

我无法发表评论,但我一直在玩弄沃沃林的答案,我决定采取一种方式,让最近一年成为最重要的一年。目前,他的代码最早可以追溯到最近几年

我所做的所有更改都是在viewDidLoad中的NSMutableArray设置中,而不是他的:

//Create Years Array from 1960 to This year
years = [[NSMutableArray alloc] init];
for (int i=1960; i<=i2; i++) {
    [years addObject:[NSString stringWithFormat:@"%d",i]];
}
//创建从1960年到今年的年份数组
年份=[[NSMutableArray alloc]init];

对于(int i=1960;i我无法发表评论,但我一直在玩弄Wolvorin的答案,我决定采取一种方法,让最近一年的代码排在最前面。目前,他的代码最早出现在最近几年

我所做的所有更改都是在viewDidLoad中的NSMutableArray设置中,而不是他的:

//Create Years Array from 1960 to This year
years = [[NSMutableArray alloc] init];
for (int i=1960; i<=i2; i++) {
    [years addObject:[NSString stringWithFormat:@"%d",i]];
}
//创建从1960年到今年的年份数组
年份=[[NSMutableArray alloc]init];

对于(int i=1960;i仅使用Swift 3更新本文中的现有答案:

var yearsTillNow : [String] {
    var years = [String]()
    for i in (1970..<2018).reversed() {
        years.append("\(i)")
    }
    return years
}
var yearsTillNow:[字符串]{
变量年份=[String]()

对于我(1970年…只是用Swift 3更新了这篇文章中的现有答案:

var yearsTillNow : [String] {
    var years = [String]()
    for i in (1970..<2018).reversed() {
        years.append("\(i)")
    }
    return years
}
var yearsTillNow:[字符串]{
变量年份=[String]()

对于我在(1970年…我稍微修改了Sharukh Mastan的代码,以始终在顶部显示当前年份

var formattedDate: String? = ""

let format = DateFormatter()
format.dateFormat = "yyyy"
formattedDate = format.string(from: date)

var yearsTillNow: [String] {
    var years = [String]()
    for i in (Int(formattedDate!)!-70..<Int(formattedDate!)!+1).reversed() {
        years.append("\(i)")
    }
    return years
}

print(yearsTillNow)
var formattedDate:字符串?=“
let format=DateFormatter()
format.dateFormat=“yyyy”
formattedDate=format.string(起始日期:日期)
var yearsTillNow:[字符串]{
变量年份=[String]()

对于i in(Int(formattedDate!)!-70..我稍微修改了Sharukh Mastan的代码,以始终在顶部显示当前年份

var formattedDate: String? = ""

let format = DateFormatter()
format.dateFormat = "yyyy"
formattedDate = format.string(from: date)

var yearsTillNow: [String] {
    var years = [String]()
    for i in (Int(formattedDate!)!-70..<Int(formattedDate!)!+1).reversed() {
        years.append("\(i)")
    }
    return years
}

print(yearsTillNow)
var formattedDate:字符串?=“
let format=DateFormatter()
format.dateFormat=“yyyy”
formattedDate=format.string(起始日期:日期)
var yearsTillNow:[字符串]{
变量年份=[String]()

对于i in(Int(formattedDate!)!-70..不能只设置年和月。从iOS 13.5.1开始,只有这些模式可用

  • 时间:以小时、分钟和(可选)上午/下午指定为单位显示日期的模式。显示的确切项目及其名称 顺序取决于区域设置。此模式的示例为[6 | 53 |下午]

  • 日期:以月、月天数和年为单位显示日期的模式。这些项目的确切顺序取决于区域设置 设置。此模式的一个示例是[2007年11月15日]

  • dateAndTime:一种模式,将日期显示为统一的星期几、月份和月日值,加上小时、分钟和分钟 (可选)AM/PM名称。这些名称的确切顺序和格式 项目取决于区域设置。此模式的示例为[Wed-Nov] 15 | 6 | 53 |下午]

  • 倒计时:一种显示小时和分钟值的模式,例如[1 | 53]。应用程序必须将计时器设置为在最短时间内启动 正确的时间间隔,并设置日期选择器作为秒的刻度


您可以使用自定义UIPickerView构建它

class DatePickerViewController: UIViewController {
    var dates =  [Date]()
    override func viewDidLoad() {
        super.viewDidLoad()
        self.view.backgroundColor = .white
        
        
        var date = Date().addYear(n: -10)
        let endDate = Date().addYear(n: 10)
        
        repeat {
            date = date.addMonth(n: 1)
            dates.append(date)
        } while date < endDate
        
        
        let picker = UIPickerView()
        picker.dataSource = self
        picker.delegate = self
        picker.translatesAutoresizingMaskIntoConstraints = false
        view.addSubview(picker)
        
        picker.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor).isActive = true
        picker.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor).isActive = true
        picker.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor).isActive = true
        picker.heightAnchor.constraint(equalToConstant: 500).isActive = true
    }
}


extension  DatePickerViewController: UIPickerViewDataSource {
    func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return 1
    }
    
    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        return self.dates.count
    }
    
    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        let date = self.dates[row]
        return date.stringDate()
    }
    
    func view(forRow row: Int, forComponent component: Int) -> UIView? {
        let label =  UILabel()
        return label
    }
}

extension  DatePickerViewController: UIPickerViewDelegate {
    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        let date = self.dates[row]
        // Date that the user select. 
        print( date, date.stringDate())
    }
}


extension Date {
    public  func addYear(n: Int) -> Date {
        let calendar = Calendar.current
        return calendar.date(byAdding: .year, value: n, to: self)!
    }
    
    public  func addMonth(n: Int) -> Date {
        let calendar = Calendar.current
        return calendar.date(byAdding: .month, value: n, to: self)!
    }
    
    public  func stringDate() -> String {
        let calendar  = Calendar.current
        let dateFormatter = DateFormatter()
        
        dateFormatter.timeZone = calendar.timeZone
        dateFormatter.locale = calendar.locale
        // Use YYYY to show year only. 
        // Use MMMM to show month only. 
        dateFormatter.setLocalizedDateFormatFromTemplate("MMMM YYYY")
        
        let dateString = dateFormatter.string(from: self)
        return dateString
    }
}


无法仅设置年和月。从iOS 13.5.1开始,只有这些模式可用

  • 时间:以小时、分钟和(可选)上午/下午指定为单位显示日期的模式。显示的确切项目及其名称 顺序取决于区域设置。此模式的示例为[6 | 53 |下午]

  • 日期:以月、月天数和年为单位显示日期的模式。这些项目的确切顺序取决于区域设置 设置。此模式的一个示例是[2007年11月15日]

  • dateAndTime:一种模式,将日期显示为统一的星期几、月份和月日值,加上小时、分钟和分钟 (可选)AM/PM名称。这些名称的确切顺序和格式 项目取决于区域设置。此模式的示例为[Wed-Nov] 15 | 6 | 53 |下午]

  • 倒计时:一种显示小时和分钟值的模式,例如[1 | 53]。应用程序必须将计时器设置为在最短时间内启动 正确的时间间隔,并设置日期选择器作为秒的刻度


您可以使用自定义UIPickerView构建它

class DatePickerViewController: UIViewController {
    var dates =  [Date]()
    override func viewDidLoad() {
        super.viewDidLoad()
        self.view.backgroundColor = .white
        
        
        var date = Date().addYear(n: -10)
        let endDate = Date().addYear(n: 10)
        
        repeat {
            date = date.addMonth(n: 1)
            dates.append(date)
        } while date < endDate
        
        
        let picker = UIPickerView()
        picker.dataSource = self
        picker.delegate = self
        picker.translatesAutoresizingMaskIntoConstraints = false
        view.addSubview(picker)
        
        picker.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor).isActive = true
        picker.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor).isActive = true
        picker.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor).isActive = true
        picker.heightAnchor.constraint(equalToConstant: 500).isActive = true
    }
}


extension  DatePickerViewController: UIPickerViewDataSource {
    func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return 1
    }
    
    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        return self.dates.count
    }
    
    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        let date = self.dates[row]
        return date.stringDate()
    }
    
    func view(forRow row: Int, forComponent component: Int) -> UIView? {
        let label =  UILabel()
        return label
    }
}

extension  DatePickerViewController: UIPickerViewDelegate {
    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        let date = self.dates[row]
        // Date that the user select. 
        print( date, date.stringDate())
    }
}


extension Date {
    public  func addYear(n: Int) -> Date {
        let calendar = Calendar.current
        return calendar.date(byAdding: .year, value: n, to: self)!
    }
    
    public  func addMonth(n: Int) -> Date {
        let calendar = Calendar.current
        return calendar.date(byAdding: .month, value: n, to: self)!
    }
    
    public  func stringDate() -> String {
        let calendar  = Calendar.current
        let dateFormatter = DateFormatter()
        
        dateFormatter.timeZone = calendar.timeZone
        dateFormatter.locale = calendar.locale
        // Use YYYY to show year only. 
        // Use MMMM to show month only. 
        dateFormatter.setLocalizedDateFormatFromTemplate("MMMM YYYY")
        
        let dateString = dateFormatter.string(from: self)
        return dateString
    }
}


如果你能粘贴你的代码,了解更多会有帮助。如果你能粘贴你的代码,了解更多会有帮助。在StackOverflow上摇摆..太棒了..!!你的公司正在为iPhone开发的新手提供培训吗?事实上,没有。这只是我公司要开发的新部门。我希望编程101的学生能够知道如何在课程的第二周后创建一系列年份值。在StackOverflow上摇摆..太好了..!!你们公司是否为iPhone开发的新生提供培训?Ac