Programim dhe zhvillim, javascript, python, php, html

Si të bëni një listë pikash me Swift?

Kështu që unë dua të bëj diçka të tillë duke përdorur swift dhe xcode:

fut përshkrimin e imazhit këtu

Ku marr çdo pikë nga një grup. Ajo që kam menduar është të krijoj një etiketë UIL dhe të krijoj një lak për që përsëritet mbi grup dhe në çdo përsëritje i shton etiketës \u{2022} + përmbajtjen. E di se \u{2022} është pika e pikës në unicode, problemi është se më duhet një mënyrë për ta ndarë listën në dy kolona siç tregohet dhe për ta bërë ngjyrën e pikës së pikës të verdhë. Kjo nuk mund të bëhet nëse i shtoj pikat në mënyrë programore siç përshkrova më lart, sepse ngjyra e paracaktuar do të ishte e zezë. Meqenëse numri i pikave ndryshon nga përmbajtja e grupit, për shembull, nëse grupi është i madhësisë 3, atëherë vetëm 3 pika do të tregonin 2 në të majtë dhe një në të djathtë, më duhet një mënyrë për të përmbushur këtë kërkesë, metoda tjetër që mendova ishte e duke pasur dy pamje tabele që marrin gjysmën e ekranit dhe shtoni këtë element në secilën pamje tabele në varësi të grupit. Cila duhet të jetë praktika më e mirë këtu apo ka një mënyrë për ta bërë këtë në tabelën e tregimeve në një formë që varet nga një grup.

29.03.2017

  • Mund të jetë e nevojshme të përdorni CoreText për këtë, shikoni tutorialin këtu 29.03.2017
  • E keni shikuar UICollectionView? Unë vetë nuk e kam përdorur shumë, por duket si një rast i përsosur përdorimi për këtë. 29.03.2017
  • Pra, ajo që vërtet dëshironi të dini është se si të vizatoni tekst në dy kolona, ​​dhe pjesa e plumbit është thjesht një harengë e kuqe, apo jo? 29.03.2017
  • Kjo nuk mund të bëhet nëse i shtoj pikat në mënyrë programore siç përshkrova më lart, sepse ngjyra e paracaktuar do të ishte e zezë. Flapdoodle. Ndryshimi i ngjyrës së tekstit në mënyrë programore është i lehtë. 29.03.2017
  • @matt po kjo është disi ideja. Po në mënyrë programore, unë mund të ndryshoj ngjyrën e një teksti të tërë, por jo një pjesë të tij, kjo do të nënkuptonte që pika dhe teksti duhet të jenë dy etiketa të ndryshme dhe kjo do ta bënte problemin më kompleks. 29.03.2017
  • Jo, e keni gabim. Një varg i atribuar ju lejon të ngjyrosni glifet individuale. Në fakt e gjithë puna mund të bëhej me një pamje të vetme nëse dëshironi. 29.03.2017
  • @matt Epo atëherë kjo thjeshton problemin për organizimin e të dhënave në dy kolonat 29.03.2017
  • Kjo është e drejtë, dhe unë kam një shembull që ju tregon se si ta bëni këtë. githneuber.com iOS-Book-Examples/blob/master/ 29.03.2017
  • Përdor koleksionin ose stackview me UILabel AttribudString stackoverflow.com/a/42721312/7250862 29.03.2017

Përgjigjet:


1

përdorni 2 etiketa brenda një pamjeje për kolonat. të dy etiketat duke u shumëfishuar

class Helper {

    static func bulletedList(strings:[String], textColor:UIColor, font:UIFont, bulletColor:UIColor, bulletSize:BulletSize) -> NSAttributedString {
        let textAttributesDictionary = [NSFontAttributeName : font, NSForegroundColorAttributeName:textColor]

        let bulletAttributesDictionary = [NSFontAttributeName : font.withSize(bulletSize.rawValue), NSForegroundColorAttributeName:bulletColor]
        let fullAttributedString = NSMutableAttributedString.init()

        for string: String in strings
        {
            let bulletPoint: String = "\u{2022}"
            let formattedString: String = "\(bulletPoint) \(string)\n"
            let attributedString: NSMutableAttributedString = NSMutableAttributedString(string: formattedString)
            let paragraphStyle = createParagraphAttribute()

            attributedString.addAttributes([NSParagraphStyleAttributeName: paragraphStyle], range: NSMakeRange(0, attributedString.length))
            attributedString.addAttributes(textAttributesDictionary, range: NSMakeRange(0, attributedString.length))

            let string:NSString = NSString(string: formattedString)
            let rangeForBullet:NSRange = string.range(of: bulletPoint)

            attributedString.addAttributes(bulletAttributesDictionary, range: rangeForBullet)
            fullAttributedString.append(attributedString)
        }
        return fullAttributedString
    }

    static func createParagraphAttribute() -> NSParagraphStyle {

        var paragraphStyle: NSMutableParagraphStyle
        paragraphStyle = NSParagraphStyle.default.mutableCopy() as! NSMutableParagraphStyle
        paragraphStyle.tabStops = [NSTextTab(textAlignment: .left, location: 15, options: NSDictionary() as! [String : AnyObject])]
        paragraphStyle.defaultTabInterval = 15
        paragraphStyle.firstLineHeadIndent = 0
        paragraphStyle.lineSpacing = 3
        paragraphStyle.headIndent = 10
        return paragraphStyle
    }
}

dhe thjesht përdorni Helper.bulletedList për të krijuar listën tuaj me pika si tekst i atribuar për etiketën

29.03.2017

2

Nuk isha i kënaqur me zgjidhjet e mësipërme. Pra, këtu është një funksion Swifty për të marrë një listë pikash:

func bulletPointList(strings: [String]) -> NSAttributedString {
    let paragraphStyle = NSMutableParagraphStyle()
    paragraphStyle.headIndent = 15
    paragraphStyle.minimumLineHeight = 22
    paragraphStyle.maximumLineHeight = 22
    paragraphStyle.tabStops = [NSTextTab(textAlignment: .left, location: 15)]

    let stringAttributes = [
        NSAttributedString.Key.font: regularSystem(size: 22),
        NSAttributedString.Key.foregroundColor: UIColor.black,
        NSAttributedString.Key.paragraphStyle: paragraphStyle
    ]

    let string = strings.map({ "•\t\($0)" }).joined(separator: "\n")

    return NSAttributedString(string: string,
                              attributes: stringAttributes)
}

Dhe ja si e përdorni:

label.numberOfLines = 0
label.attributedText = bulletPointList(strings: ["Foo", "Bar", "Lol"])
30.07.2018
  • kjo është e mirë për listën pa ndryshuar ngjyrën e plumbit. Pra, ka të njëjtën ngjyrë si teksti dhe unë isha duke kërkuar për këtë stil të veçantë ose mund të kisha vendosur vetëm pikën në tekst. dhe mbajeni të thjeshtë. 04.03.2021

  • 3

    Për Swift 5, mund të përdorni këtë klasë:

    class NSAttributedStringHelper {
        static func createBulletedList(fromStringArray strings: [String], font: UIFont? = nil) -> NSAttributedString {
    
            let fullAttributedString = NSMutableAttributedString()
            let attributesDictionary: [NSAttributedString.Key: Any]
    
            if font != nil {
                attributesDictionary = [NSAttributedString.Key.font: font!]
            } else {
                attributesDictionary = [NSAttributedString.Key: Any]()
            }
    
            for index in 0..<strings.count {
                let bulletPoint: String = "\u{2022}"
                var formattedString: String = "\(bulletPoint) \(strings[index])"
    
                if index < strings.count - 1 {
                    formattedString = "\(formattedString)\n"
                }
    
                let attributedString: NSMutableAttributedString = NSMutableAttributedString(string: formattedString, attributes: attributesDictionary)
                let paragraphStyle = NSAttributedStringHelper.createParagraphAttribute()
       attributedString.addAttributes([NSAttributedString.Key.paragraphStyle: paragraphStyle], range: NSMakeRange(0, attributedString.length))
            fullAttributedString.append(attributedString)
           }
    
            return fullAttributedString
        }
    
        private static func createParagraphAttribute() -> NSParagraphStyle {
            let paragraphStyle: NSMutableParagraphStyle = NSParagraphStyle.default.mutableCopy() as! NSMutableParagraphStyle
            paragraphStyle.tabStops = [NSTextTab(textAlignment: .left, location: 15, options: NSDictionary() as! [NSTextTab.OptionKey : Any])]
            paragraphStyle.defaultTabInterval = 15
            paragraphStyle.firstLineHeadIndent = 0
            paragraphStyle.headIndent = 11
            return paragraphStyle
        }
    }
    

    Për ta përdorur atë:

    let stringArray = ["first row", "second row", "third row"]
    label.attributedText = NSAttributedStringHelper.createBulletedList(fromStringArray: stringArray, font: UIFont.systemFont(ofSize: 15))
    
    30.01.2018
  • Kjo zgjidhje është thjesht perfekte. Pa shumë përpjekje, ai nxjerr listën e pikave si në çdo dokument të bukur. Faleminderit për ndarjen e këtij kodi. 26.07.2019
  • faleminderit për këtë fragment të lezetshëm, një pyetje, si mund ta vendosni gjithë vlerën në qendër? Unë u përpoqa të bëj shtrirjen e tekstit në klasën tuaj ndihmëse në qendër, por nuk funksionoi, gjithashtu shtrirja ime e përshkrimit është vendosur tashmë në qendër. 08.12.2019

  • 4

    Në Swift tabStop do të funksionojë me ndryshimet e mëposhtme

    let paragraphStyle = NSMutableParagraphStyle()
    paragraphStyle.minimumLineHeight = 0 // 0 means unlimited
    paragraphStyle.maximumLineHeight = 0
    paragraphStyle.firstLineHeadIndent = 30
    paragraphStyle.headIndent = 0
    paragraphStyle.tabStops = [NSTextTab(textAlignment: .left, location: 15, options: Dictionary<NSTextTab.OptionKey, Any>())]
    paragraphStyle.defaultTabInterval = 10  //changing defaultTabInterval changes the distance between black dot & text
    paragraphStyle.lineSpacing = 5
    
    19.01.2018
    Materiale të reja

    Masterclass Coroutines: Kapitulli-3: Anulimi i korutinave dhe trajtimi i përjashtimeve.
    Mirë se vini në udhëzuesin gjithëpërfshirës mbi Kotlin Coroutines! Në këtë seri artikujsh, unë do t'ju çoj në një udhëtim magjepsës, duke filluar nga bazat dhe gradualisht duke u thelluar në..

    Faketojeni derisa ta arrini me të dhënat false
    A e gjeni ndonjëherë veten duke ndërtuar një aplikacion të ri dhe keni nevojë për të dhëna testimi që duken dhe duken më realiste ose një grup i madh të dhënash për performancën e ngarkesës...

    Si të përdorni kërkesën API në Python
    Kërkesë API në GitHub për të marrë depot e përdoruesve duke përdorur Python. Në këtë artikull, unë shpjegoj procesin hap pas hapi për të trajtuar një kërkesë API për të marrë të dhëna nga..

    Një udhëzues hap pas hapi për të zotëruar React
    Në këtë artikull, do të mësoni se si të krijoni aplikacionin React, do të mësoni se si funksionon React dhe konceptet thelbësore që duhet të dini për të ndërtuar aplikacione React. Learning..

    AI dhe Psikologjia — Pjesa 2
    Në pjesën 2 të serisë sonë të AI dhe Psikologji ne diskutojmë se si makineritë mbledhin dhe përpunojnë të dhëna për të mësuar emocione dhe ndjenja të ndryshme në mendjen e njeriut, duke ndihmuar..

    Esencialet e punës ditore të kodit tim VS
    Shtesat e mia të preferuara - Git Graph 💹 Kjo shtesë është vërtet e mahnitshme, e përdor përpara se të filloj të punoj për të kontrolluar dy herë ndryshimet dhe degët më të fundit, mund të..

    Pse Python? Zbulimi i fuqisë së gjithanshme të një gjiganti programues
    Në peizazhin gjithnjë në zhvillim të gjuhëve të programimit, Python është shfaqur si një forcë dominuese. Rritja e tij meteorike nuk është rastësi. Joshja e Python qëndron në thjeshtësinë,..